#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