业务中要用notify发短信。应用端向notify发,有一个短信订阅该消息,并组织内容发出去。
我们决定采用velocity来组织内容,并且当修改vm模板内容时能自动识别并加载,不用重新启动程序。
package com.test.velocity;
import java.io.File;
import java.io.StringWriter;
import java.util.Map;
import java.util.Observable;
import java.util.Observer;
import java.util.Properties;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
/**
*
* 描述
*
* @author 锅巴
* @version 1.0 2010-7-12
*/
public class ParseNotify implements Observer {
private VelocityEngine ve;
private Template template;
private final String velocityFileName = "hellovelocity.vm";
private final String velocityFilePath = "D:\\workspace_mvn\\my-nom\\";
public ParseNotify() throws Exception {
init();
Object velocityFileChangeObservable = new VelocityFileChangeObservable(
velocityFilePath + velocityFileName);
((Observable) velocityFileChangeObservable).addObserver(this);
new Thread((Runnable) velocityFileChangeObservable).start();
}
private void init() throws Exception {
ve = new VelocityEngine();
Properties prop = new Properties();
prop.setProperty(Velocity.ENCODING_DEFAULT, "GBK");
prop.setProperty(Velocity.INPUT_ENCODING, "GBK");
prop.setProperty(Velocity.OUTPUT_ENCODING, "GBK");
ve.init(prop);
template = ve.getTemplate(velocityFileName);
}
private Template getVelocityTemplate() throws Exception {
return template;
}
public SmsBean parseNotifyMsg(Map<String, String> notifyMsg)
throws Exception {
VelocityContext context = new VelocityContext();
for (Map.Entry<String, String> entry : notifyMsg.entrySet()) {
context.put(entry.getKey(), entry.getValue());
}
StringWriter writer = new StringWriter();
getVelocityTemplate().merge(context, writer);
return new SmsBean(writer.toString(), notifyMsg.get("mobile"));
}
public void update(Observable o, Object arg) {
// TODO Auto-generated method stub
try {
init();
System.out.println("ParseNotify Observable update ");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
static class VelocityFileChangeObservable extends Observable implements
Runnable {
private long lastModifiedTime;
private File file;
public VelocityFileChangeObservable(String filePath) {
file = new File(filePath);
if (!file.exists()) {
throw new IllegalArgumentException("file not exists");
}
lastModifiedTime = file.lastModified();
}
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
Thread.sleep(5000);
if (file.lastModified() > lastModifiedTime) {
this.setChanged();
this.notifyObservers();
this.lastModifiedTime = file.lastModified();
System.out.println("hellovelocity.vm is changed");
}
System.out.println("VelocityFileChangeObservable run");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
ParseNotify 类负责解晰notify信息(以Map传入),有一个内部类VelocityFileChangeObservable 观察vm文件是否被更改,如果更改则通知ParseNotify 重新load vm
阿里巴巴招聘:java/C/C++/PHP ,Hadoop,搜索工程师,
前端,视觉,交互工程师,系统/数据库工程师,
产品经理,运营,市场等
有意请将简历发邮件:iloveditan@sina.cn
分享到:
相关推荐
通过深入理解`velocity.properties`配置文件中的各项配置,开发者能够更加高效地利用Apache Velocity框架来构建动态页面和文档。合理配置这些选项不仅能够提升应用性能,还能确保模板渲染的准确性和灵活性。
总的来说,SpringBoot集成Velocity代码生成模板是现代企业级开发中一个非常实用的技术,它使得开发人员能够更专注于业务逻辑,而不是重复的模板代码。通过熟练掌握这一技术,开发者能够在保证代码质量的同时,提高...
在“Apache-Velocity-java”这个压缩包中,很可能包含了示例代码和一个简单的 Velocity 模板文件,展示如何在Java应用程序中使用Velocity来生成动态HTML。你可以通过以下步骤运行DEMO: 1. 解压压缩包。 2. 查看...
** Velocity 模板使用指南中文版 ** Velocity 是一个基于 Java 的开源模板引擎,它允许开发者将业务逻辑与页面展示分离,使得网页设计者可以专注于页面的布局和样式,而程序员则关注于程序的逻辑处理。Velocity 在 ...
5. **合并模板与数据**:使用`Velocity.mergeTemplate()`方法,传入模板文件路径和上下文,生成最终的邮件内容字符串。 6. **发送邮件**:将生成的邮件内容传递给邮件服务API,完成发送。 关于源码,Velocity的...
教程内容包含了解Velocity模板引擎的基础知识、学习VTL语法、设置和使用velocity.properties配置文件以及如何在Servlet和Spring MVC环境中集成Velocity。 ### Velocity模板引擎的基本使用方法 Velocity可以用来...
3. **读取模板文件**:使用Velocity的`ResourceLoader`加载Word模板文件,这通常涉及到文件系统的操作或者使用URL。 4. **填充数据**:在上下文中添加你需要的数据,例如数据库查询结果、服务器配置信息等。 5. **...
Velocity 模板使用指南中文版 Velocity 是一种流行的模板引擎,广泛应用于Java 和 .Net 平台。它提供了一个灵活、可扩展的模板语言,能够根据需要生成动态内容。本文档是 Velocity 模板使用指南中文版,旨在帮助...
本项目“使用了Struts结构和Velocity模板技术的BLOG”旨在演示如何结合这两种技术来创建一个功能完善的博客系统。 **Struts框架** Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架。它为...
Velocity是一款Java模板引擎,它是Apache软件基金会的Jakarta项目之一,主要用于生成动态Web内容。Velocity通过将内容展示与业务逻辑分离,使得开发者可以专注于后端逻辑,而设计师可以专注于页面设计。在这个...
Velocity的目标是使开发者能够用简单的模板语言来控制页面的布局和格式,同时将复杂的逻辑处理交给后台Java代码。这样做的好处在于,模板设计师和程序员可以各自专注于自己的工作,提高了开发效率和代码可维护性。 ...
在Velocity中,View就是模板文件(.vm),它包含静态文本和Velocity指令,Model则是Java对象,Controller的工作由Velocity Engine完成,它解析模板,将Java对象的数据嵌入到模板中,生成最终的HTML或其他格式的输出...
在使用Velocity时,首先需要在项目中引入这两个jar包,然后配置Velocity的上下文(Context),将Java对象放入其中,这些对象的属性可以在VM模板中通过$符号访问。接下来,通过Velocity引擎解析和渲染模板,生成最终...
- **变量引用**:在Velocity模板中,通常使用`$variable`来引用Java对象的属性,例如`$user.name`表示获取名为"user"的对象的"name"属性。 - **指令**: - `#set`:用于赋值,如`#set($count = 1)`,将$count变量...
对于Velocity,需要配置`VelocityViewResolver`,告诉SpringMVC使用Velocity来渲染视图。例如: ```xml <bean class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"> ...
接下来,我们需要创建一个Controller来处理请求并返回Velocity模板。例如: ```java @RestController public class ViewController { @GetMapping("/hello") public ModelAndView hello() { Map, Object> ...
Velocity 模板语言和文档自动化技术 Velocity 模板语言是Apache软件基金会的一个开源项目,旨在提供一个灵活、模块化的模板引擎,可以用于生成静态或动态的文档、报表、邮件等。Velocity 模板语言的核心思想是将...