天丫头的gravatar头像
天丫头 2014-04-28 20:19:04

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


打赏

文件名:Quartz.zip,文件大小:21.729K 下载
最代码最近下载分享源代码列表最近下载
dscing  LV8 2018年8月6日
QQ917678383  LV3 2016年8月14日
jiangarctic  LV17 2016年8月11日
好脑壳  LV16 2016年4月19日
zhou88  LV9 2015年11月26日
wangwl  LV2 2015年11月19日
wr10980170  LV3 2015年11月17日
1102845913  LV4 2015年11月10日
寒樱玉冕  LV12 2015年9月7日
dfhkvvvggc  LV3 2015年9月1日
最代码最近浏览分享源代码列表最近浏览
我们都是小怪兽  LV3 2023年2月17日
Hachi6  LV13 2022年12月4日
Hachi6  LV13 2022年12月4日
1358849392  LV21 2022年11月23日
林间听风  LV10 2022年8月16日
G2andIG  LV5 2022年1月17日
240598911  LV10 2022年1月9日
13798956075  LV1 2021年10月8日
lcj166  LV5 2021年8月22日
月销售目标  LV2 2021年4月21日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友