Velocity 基础语法

#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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏King_3的技术专栏

leetcode-28-Implement strStr()

2626
来自专栏Jed的技术阶梯

图解归并排序

824
来自专栏阮一峰的网络日志

YAML 语言教程

编程免不了要写配置文件,怎么写配置也是一门学问。 YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便。 本文介绍 YAML 的语法,...

2646
来自专栏软件开发 -- 分享 互助 成长

连续多行输入--C++ 中字符串标准输入的学习及实验(续篇)

编程中常常会用到连续多行输入的情况,如果事先知道要输入多少行的话,可以直接定义一个变量,然后用循环就可以实现了,但有时候事先并不知道,要输入多少行,于是就可以用...

2795
来自专栏海天一树

小朋友学Java(10):多态

学本节之前,可以先复习 小朋友学C++(12):多态 一、定义 多态是同一个行为具有多个不同表现形式或形态的能力。 二、现实中的多态 例1:打印机 ? 例2:按...

2815
来自专栏海天一树

小朋友学C语言(1):Hello World

首先,需要一款C语言的编译器,可以使用在线编译器,也可以在本地安装编译器,比如Mac电脑可以安装Xcode,PC可以安装Dev C++。 若是第一次编写程序,建...

2425
来自专栏mathor

LeetCode329. 矩阵中的最长递增路径

 dfs,主函数中枚举起点,然后dfs函数中枚举四个方向进行移动,但是光dfs还不够,因为我们发现存在很多冗余,所以这是一道dfs+dp的问题,resul...

561
来自专栏zhisheng

干货分享:让你分分钟学会 javascript 闭包 一像素

闭包,是 javascript 中重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是ECMA规范给的定义,如果没有实战经验,你很难从定义去理解它。...

3315
来自专栏coding for love

JS入门难点解析8-作用域,作用域链,执行上下文,执行上下文栈等分析

(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)

591
来自专栏C/C++基础

C++11 Unicode支持

在C++98中,为了支持Unicode字符,使用wchar_t类型来表示“宽字符”,但并没有严格规定位宽,而是让wchar_t的宽度由编译器实现,因此不同的编译...

1143

扫码关注云+社区