背景说明:在基于spring MVC、volicity的WEB项目中,需要在volicity页面中读取远程配置信息(zookeeper)。
第一步:编写读取远程配置信息工具类(具体不做说明)
详情可参阅:http://timerbin.iteye.com/blog/2252372
第二步:编写自定义指令(Directive)
package cn.timerbin.util; import java.io.IOException; import java.io.Writer; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.velocity.context.InternalContextAdapter; import org.apache.velocity.exception.MethodInvocationException; import org.apache.velocity.exception.ParseErrorException; import org.apache.velocity.exception.ResourceNotFoundException; import org.apache.velocity.runtime.directive.Directive; import org.apache.velocity.runtime.parser.node.ASTBlock; import org.apache.velocity.runtime.parser.node.Node; import org.apache.velocity.runtime.parser.node.SimpleNode; import com.sun.el.parser.AstString; public class ConfigTool extends Directive { private static final Log logger = LogFactory.getLog(ConfigTool.class); private static final String MACRO_TAG_NAME="config"; private static final int MACRO_TAG_TYPE = 2; //在spring上下文中获取依赖BEAN private static ZookeeperUtil zookeeperUtil = (ZookeeperUtil) ApplicationContextUtil.getApplicationContext().getBean(ZookeeperUtil.class); private SimpleNode simpleNode = null; private String defauleValue="timerBin"; @Override public boolean render(InternalContextAdapter context, Writer writer, Node node) throws IOException, ResourceNotFoundException, ParseErrorException, MethodInvocationException { String value = null; for(int i=0,j=node.jjtGetNumChildren();i<j;++i){ simpleNode = (SimpleNode)node.jjtGetChild(i); if (null == simpleNode){ continue; } if(i == 0){ value = getValue((String)simpleNode.value(context)); } } if(StringUtils.isBlank(value)){ value = defauleValue; } writer.write(value); return false; } //在zookeeper中读取其中的值 private String getValue(String key) { String value = null; try { if (!StringUtils.isBlank(key) && null != zookeeperUtil) { value = zookeeperUtil.get(key); if (StringUtils.isBlank(value)) { value = defauleValue; } }else{ value = defauleValue; } } catch (Exception e) { value = defauleValue; logger.error(String.format("get.value.is.error:%s", key), e); } return value; } /** * 指定指令的名称 */ @Override public String getName() { return MACRO_TAG_NAME; } /** * 当前有LINE 1,BLOCK 2两个值,line行指令,不要end结束符,block块指令,需要end结束符 */ @Override public int getType() { return MACRO_TAG_TYPE; } }
第三步:定义获取spring 上下文 applicationContext的工具类
package cn.timerbin.util; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; public class ApplicationContextUtil implements ApplicationContextAware { private static ApplicationContext context; public void setApplicationContext(ApplicationContext context) throws BeansException { this.context=context; } public static ApplicationContext getApplicationContext(){ return context; } }
第四步:将自定义指令和自定义applicationConext的工具类定义到spring配置文件中
<bean class="cn.timerbin.util.ApplicationContextUtil"></bean> <!--volicity--> <bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"> <property name="resourceLoaderPath" value="/"/> <property name="configLocation" value="classpath:velocity.properties"/> <property name="velocityProperties"> <props> <prop key="userdirective">cn.timerbin.util.ConfigTool</prop> </props> </property> </bean>
其中velocityConfigurer常用的配置如下所示:
resourceLoaderPath:页面所放路径
configLocation:模板的配置参数信息其实与velocityProperties可以二选一来定义
velocityProperties
---userdirective:自定义指令
----velocimacro.library:定义宏的绑定仓库地址
其中配置较多可参阅:http://biz.163.com/0000/05/0226/15/1DHBTUKK000017JV.html
第五步:在volicity的页面VM中使用自定义指令
#config("zookeeper-key-name")
当然自定义指令中可以传输多个值。
注:以上配置只是提供了简单的思路,望各位在应用到自己项目中时请自行考虑安全问题(推荐签名方式传值)。
相关推荐
React速度 React Velocity是一个应用程序,可让您在导出... 在该应用程序的Redux功能中,您可以分别将动作创建者添加到动作文件夹,将reducer添加到reducers文件夹,并将容器和组件分别添加到container和components文
里面有struts2的国际化例子,还有struts2校验框架例子,还有freemarker结合struts2的例子,还有一个volicity和struts2对比的例子(引张荣华的一部分'作者言明要标注,所以特此写明')还有自己写的以部分!...
二级理论题(选择83+判断96).xlsx
2024年中国超声非侵入式腐蚀检测传感器行业研究报告
设备自动化综合利用率实践,详细描述了OEE各方面的参数与应用,让设备自动化工厂利用此工具可以快速提高生产
python
server-jre-8u411-windows-x64.tar.gz
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
单片机学习代码资料
输入电压DC15V,输出电压调节范围:+18V~+30V,电流:500mA~100mA范围,纹波1%
nacos-server-2.3.2
聚类微博数据可视化分析系统 技术框架 python + django + mysql + nlp + 聚类 +pycharm 角色介绍 普通用户 qqq 123456 模块分析 登录注册 数据获取 数据处理 数据挖掘 NLP情感分析 K-means聚类分析 敏感词预警 (支持邮箱发送模式) 不同聚类 (三个不同的聚类计算结果对比,选择最优的聚类来显示) 数据可视化模块 大事件数据可视化 热点数据排行 热门主题词云 评论数据可视化 时间顺序可视化 退出模块 数据库weibo_nlp_system 分析原理 我的最爱是动漫,你喜欢什么呢? 我 的 最爱 是 动漫 你 喜欢 什么 呢
选择判断题库.doc
【作品名称】:青藏高原城市化和生态环境迫切化大屏数据可视化系统 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。
TCABEE 008-2020 轨道交通车站高效空调系统技术标准.pdf
MySQL笔记思维导图
附件是Windows 10 Docker 安装教程, 文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
东北大学信息学院控制与科学博士课程《matlab语言与应用》薛定宇课程作业 chapter1-chapter14 自己做的
azure-ai-services-speech-service(微软语音服务文档)