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
猜你喜欢
- java quartz定时任务示例
- Spring动态对Quartz定时任务的管理,实现动态加载,停止的配置实例代码
- Spring与Quartz集成配置实现简单定时任务调度
- SpringBoot+Quartz动态定时任务
- ssm整合quartz定时任务实现动态增删改查,暂停任务,恢复任务
- spring整合java quartz实现动态定时任务的前台网页配置与管理
- 分享通过spring注解实现的quartz job
- spring+quartz实现定时任务(入门小实例)
- spring boot+spring data jpa+h2实现quartz任务管理系统
- quartz demo实例集合
- java swing编写Quartz表达式生成器CronExpBuilder
- Spring2.6配置java quartz1.6定时任务
- /
- /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 各种demo实例
- [工作必备]spring定时器简单的demo
- Java Spring定时器Demo, 可自动跳过节假日
- Spring两种常用的事务管理范例AspectJ和基于注解方式
- 证 Spring生命周期默认初始化和销毁方法通过xml配置实现
- 证 spring通过@Async注解实现异步执行Service方法并且通过Java Future对象得到执行结果
- spring入门实例demo
- spring实例入门教程
- spring整合rmi代码实例
- 原证精 spring如何注入List,Set,Map对象
- Spring Hibernate Spring Data MongoDB Akka Titles Bootstrap JQuery Maven 大全
- 证 spring实现忽略禁用@Required注解的实例