#set($count=$Integer.parseInt($auth_count))
#foreach($i in [1..$count])
$application_prefix.trim()as_hs_auth00${i}
#end
1通用规则
1) "#":用来标识Velocity的脚本语句,包括#set、#if、#else、#end、#foreach等。
2) "$":用来标识一个对象(或理解为变量)。
3) "{}":用来明确标识Velocity变量。
2 简单替换
(适用于简单的变量替换)
语法:
name: 变量名(变量名中除下划线、连接符外,不能含有其他特殊字符)
${name} 有值则替换;无则原样。
$!{name} 有值则替换;无则为空。
eg: ${} $!{}
参数:{user=root}
替换前:
<username>${user}</username>
<workspace>${workspace}</workspace>
<database>$!{database}</database>
3 循环遍历
(适用于deploy.xml中的表格类型参数、多选类型参数、服务器参数)
语法:
a.遍历数组
#foreach($var in $arrays ) // 集合包含下面三种Vector,Hashtable,Array
......
#end
b.循环对象
ⅰ第一种方法
#foreach($obj in $data.entrySet()) <${obj.getKey()}>${obj.value}</${obj.getKey()}> //获取key-value
#end
ⅱ第二种方法
#foreach($key in $data.keySet())
<$key>$data.get($key)</$key> //获取key-value
#end
4多层遍历循环嵌套
(适用于类似表格嵌套的场景)
4.1 效果
(红色部分:可变参数;蓝色标签:闭合段可以出现多个;)
<servers keypattern=".*" desc="start1">
<server name="server1" host="10.139.102.127" port="6379">
<param name="minIdle" value="10" />
<param name="maxIdle" value="100" />
<param name="maxActive" value="1000" />
<param name="maxWait" value="3000" />
<param name="readOnly" value="false" />
<param name="slaveof" value="servername" />
<param name="save" value="false" />
</server>
<server name="server3" host="10.139.54.65" port="6379">
<param name="minIdle" value="10"/>
<param name="maxIdle" value="100"/>
<param name="maxActive" value="500"/>
<param name="maxWait" value="3000"/>
<param name="readOnly" value="false"/>
<param name="slaveof" value="servername"/>
<param name="save" value="false"/>
</server>
</servers>
<servers keypattern="^2.*" desc="start2">
<server name="server2" host="127.0.0.1" port="6390">
<param name="minIdle" value="10" />
<param name="maxIdle" value="100" />
<param name="maxActive" value="500" />
<param name="maxWait" value="3000" />
<param name="readOnly" value="false" />
<param name="slaveof" value="servername" />
<param name="save" value="false" />
</server>
<server name="server3" host="127.0.0.1" port="6391">
<param name="minIdle" value="10" />
<param name="maxIdle" value="100" />
<param name="maxActive" value="500" />
<param name="maxWait" value="10000" />
<param name="readOnly" value="true" />
<param name="slaveof" value="servername" />
<param name="save" value="false" />
</server>
</servers>
4.2 deploy.xml中参数配置
<!-- 一个表格实现表格嵌套 -->
<variables describe="集群基本参数">
<field name="servers" label="服务配置" type="grid" >
<field name="keypattern" label="keypattern" type="input"></field>
<field name="server_ip" label="服务IP" type="input"></field>
<field name="server_port" label="服务PORT" type="input"></field>
<field name="save" label="是否保存" type="select" options="false:否;true:是">false</field>
</field>
</variables>
4.3 velocity语法模板
#set($serverIds="") //设置变量
#foreach($server in $servers)
#set($count=0)
#if($serverIds.length()>0)
#foreach($value in $serverIds.split(";"))
#if($value != $server.keypattern )
#set($count=$count+1)
#end
#end
#if($count == $serverIds.split(";").size())
#set($serverIds=$serverIds+";"+$server.keypattern)
#end
#else
#set($serverIds=$server.keypattern)
#end
#end
//以上绿色部分是将效果中servers的keypattern值去重复并缓存供下面使用
#foreach($value in $serverIds.split(";")) //取出已缓存的servers的keypattern值
<servers keypattern="$value" desc="start1"> //生成servers标签
#foreach($server in $servers) //遍历表格参数
//将表格行参数中keypattern值和缓存中的比较,避免生成多段servers标签并为其添加子server标签
#if($value==$server.keypattern)
<server name="$server.server_name" host="$server.server_ip" port="$server.server_port">
<param name="minIdle" value="10" />
<param name="maxIdle" value="100" />
<param name="maxActive" value="1000" />
<param name="maxWait" value="3000" />
<param name="readOnly" value="false" />
<param name="slaveof" value="servername" />
<param name="save" value="$server.save" />
</server>
#end
#end
</servers>
#end