spring集成quartz实现的定时更新cache的代码配置
应项目需要做了一个定时更新的 cache 框架,采用 spring+quartz 很方便的实现,可以适用任何需要定时才更新的地方,比如静态网页 cache 等。代码很简单:
---------------------------------QuartzCacheHandler-------------------------------------
package com.bankcomm.cache;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.bankcomm.util.ContextUtil;
public class QuartzCacheHandler {
private static ApplicationContext actx;
Log log = LogFactory.getLog( this .getClass());
/**
* 程序载入配置文件<br>
* Author:pesome<br>
* Time:2006-12-8 上午10:29:26<br>
*/
public static void init() {
try {
actx = new ClassPathXmlApplicationContext(
new String[] { " quartzCache*.xml " } );
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
}
private QuartzCacheHandler() {
}
/**
* 在程序载入配置文件时使用<br>
* Author:pesome<br>
* Time:2006-12-8 上午10:28:07<br>
*
* @param beanName
* @param key
* @return
*/
public static Object getSe(String beanName, String key) {
return ((QuartzCache) actx.getBean(beanName)).get(key);
}
/**
* 在web容器中,初始化时载入配置文件时使用<br>
* Author:pesome<br>
* Time:2006-12-8 上午10:28:40<br>
*
* @param beanName
* @param key
* @return
*/
public static Object get(String beanName, String key) {
return ((QuartzCache) ContextUtil.getBean(beanName)).get(key);
}
}
-----------------------------------QuartzCache-----------------------------------------------
package com.bankcomm.cache
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public abstract class QuartzCache {
private Log log = LogFactory.getLog( this .getClass());
protected Map cacheMap = new HashMap();
/**
* 抽象方法由具体的cache类实现,一般为调用put方法<br>
* Author:pesome<br>
* Time:2006-12-7 下午05:47:26<br>
*/
public abstract void refresh();
public Object get(String key) {
return cacheMap.get(key);
}
public void put(String key, Object value) {
cacheMap.put(key, value);
log.info( " put to quartz cache key= " + key + " ,value= " + value);
}
}
---------------------------------------------------------------------------------------------------------
Web.xml 中只需加 2 句:
< context-param >
< param-name > contextConfigLocation </ param-name >
< param-value > /WEB-INF/applicationContext*.xml </ param-value >
</ context-param >
< listener >
< listener-class >
com.bankcomm.util.MyContextLoaderListener
</ listener-class >
</ listener >
最后是applicationContext_quartzCache.xml配置文件,就是标准的spring结合quartz的配置文件:
<? xml version="1.0" encoding="GB2312" ?>
<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd" >
< beans >
< bean
class ="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
< property name ="triggers" >
< list >
< ref local ="simpleTrigger" />
</ list >
</ property >
</ bean >
< bean id ="methodInvokingJobDetail"
class ="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >
< property name ="targetObject" >
< ref bean ="simpleCache" />
</ property >
< property name ="targetMethod" >
< value > refresh </ value >
</ property >
</ bean >
< bean id ="simpleTrigger"
class ="org.springframework.scheduling.quartz.SimpleTriggerBean" >
< property name ="jobDetail" >
<!-- see the example of method invoking job above -->
< ref bean ="methodInvokingJobDetail" />
</ property >
< property name ="startDelay" >
< value > 0 </ value >
</ property >
<!-- set the refresh interval,millisecond -->
< property name ="repeatInterval" >
< value > 2000 </ value >
</ property >
</ bean >
<!-- custom job beans -->
< bean id ="simpleCache" class ="com.bankcomm.cache.SimpleCache" ></ bean >
</ beans >
写自己的QuartzCache子类并实现refresh方法,然后在配置文件中定义bean和相应的trigger就能方便的实现定时cache了。示例中使用了 SimpleTriggerBean ,每2s更新一次。也可以使用CronTriggerBean,每天定时更新。 使用 cache ,只需调用 QuartzCacheHandler 的 get 和 getSe 就行, get 是在由 web 容器启动 quartz 的场合使用, getSe 在使用 init 方法启动时使用。 Get 中调用了自己写的一个 ContextUtil ,它包含一个静态的 applicationContex 的引用,在 spring 容器启动后由 MyContextLoaderListener (重载 spring 的ContextLoaderListener )填充。
原文地址:http://www.blogjava.net/i369/articles/112007.html
由最代码官方编辑于2016-6-13 9:31:26
猜你喜欢
- 分享通过spring注解实现的quartz job
- Spring动态对Quartz定时任务的管理,实现动态加载,停止的配置实例代码
- spring动态配置定时器quartz2.x教程详解
- SpringBoot+Quartz动态定时任务
- spring boot+spring data jpa+h2实现quartz任务管理系统
- spring+quartz实现定时任务(入门小实例)
- java quartz定时任务示例
- quartz demo实例集合
- Spring2.6配置java quartz1.6定时任务
- Spring3.2.4+Quartz2.2.0+Demo
- java swing编写Quartz表达式生成器CronExpBuilder
- spring集成quartz的集群配置实例
- /
- /Quartz
- /Quartz/.classpath
- /Quartz/.project
- /Quartz/.settings
- /Quartz/.settings/org.eclipse.core.resources.prefs
- /Quartz/.settings/org.eclipse.jdt.core.prefs
- /Quartz/.settings/org.eclipse.m2e.core.prefs
- /Quartz/pom.xml
- /Quartz/src
- /Quartz/src/main
- /Quartz/src/main/java
- /Quartz/src/main/java/com
- /Quartz/src/main/java/com/hinsteny
- /Quartz/src/main/java/com/hinsteny/quartz
/Quartz/src/main/java/com/hinsteny/quartz/App.java
/Quartz/src/main/java/com/hinsteny/quartz/CacheHandler.java
/Quartz/src/main/java/com/hinsteny/quartz/ContextUtil.java
/Quartz/src/main/java/com/hinsteny/quartz/HinstenyContextLoaderListener.java
/Quartz/src/main/java/com/hinsteny/quartz/QuartzCache.java
- /Quartz/src/main/java/com/hinsteny/quartz
- /Quartz/src/main/java/com/hinsteny
- /Quartz/src/main/java/com
- /Quartz/src/main/java
- /Quartz/src/main
- /Quartz
相关代码
- 证 Spring生命周期接口InitializingBean和DisposableBean的实例演示
- Java Spring的三种注入方式
- 证 spring通过p-namespace的方式实现xml配置bean的属性实例
- 证 spring通过c-namespace的方式实现xml配置bean构造函数实例
- 证 Spring通过properties文件的配置实现bean初始化的简单示例
- 证 Spring自定义类似@Required注解实现在容器启动时对bean进行依赖校验
- spring 各种demo实例
- Java Spring定时器Demo, 可自动跳过节假日
- 证 Spring通过配置component-scan base-package实现自动扫码指定路径的类并初始化bean的简单示例
- Spring两种常用的事务管理范例AspectJ和基于注解方式
- 证 spring通过@Async注解实现异步执行Service方法并且通过Java Future对象得到执行结果
- [工作必备]spring定时器简单的demo
最近下载
最近浏览




