<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一個定時更新cache框架

    應(yīng)項目需要做了一個定時更新的 cache 框架,采用 spring+quartz 很方便的實現(xiàn),可以適用任何需要定時才更新的地方,比如靜態(tài)網(wǎng)頁 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類實現(xiàn),一般為調(diào)用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配置文件,就是標(biāo)準(zhǔn)的spring結(jié)合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子類并實現(xiàn)refresh方法,然后在配置文件中定義bean和相應(yīng)的trigger就能方便的實現(xiàn)定時cache了。示例中使用了 SimpleTriggerBean ,每2s更新一次。也可以使用CronTriggerBean,每天定時更新。 使用 cache ,只需調(diào)用 QuartzCacheHandler get getSe 就行, get 是在由 web 容器啟動 quartz 的場合使用, getSe 在使用 init 方法啟動時使用。 Get 中調(diào)用了自己寫的一個 ContextUtil ,它包含一個靜態(tài)的 applicationContex 的引用,在 spring 容器啟動后由 MyContextLoaderListener (重載 spring ContextLoaderListener )填充。

    這些東西也就幾個小時搞定,多虧了springquartz這些開源軟件啊。要自己用timer實現(xiàn),費時費力,擴展性,易用性等也會差很多。

    posted on 2006-12-13 14:46 pesome 閱讀(4134) 評論(7)  編輯  收藏 所屬分類: 開源軟件

    評論

    # re: 一個定時更新cache框架 2006-12-13 15:34 BeanSoft

    支持一下...呵呵..補充一下:quartz也可以用在非Web應(yīng)用的定時操作,官方網(wǎng)站上說的.不要誤解為只能在Spring里才能用它, 它就是一個普通的定時器類庫.  回復(fù)  更多評論   

    # re: 一個定時更新cache框架 2006-12-13 15:46 pesome

    呵呵,spring因為提供了與quartz的集成,能方便的進行配置,所以使用了spring。能到openfans提交下你的blog不,有很多不錯的東西啊。大家交個朋友,謝謝!  回復(fù)  更多評論   

    # re: 一個定時更新cache框架 2006-12-13 15:55 BeanSoft

    不客氣...quartz我只看過,沒用過.. 歡迎轉(zhuǎn)載, 互相幫助, 共同進步! 有空我也去 openfans.net 灌水去..  回復(fù)  更多評論   

    # re: 一個定時更新cache框架 2006-12-13 16:05 pesome

    呵呵,現(xiàn)在還沒開論壇,提交下你的blog(點擊feed導(dǎo)入->增加feed)先,這樣每天就可以看到你的新文章了。  回復(fù)  更多評論   

    # re: 一個定時更新cache框架 2006-12-13 17:20 loocky

    恩,是的SPRING+quartz可以定時FTP了==都可以  回復(fù)  更多評論   

    # re: 一個定時更新cache框架 2007-01-03 10:43 guoyumin

    good code

    不過有些地方似乎有點過度設(shè)計的意思,也就是說,如果不用一些spring的特性,是不是會更簡潔一些?有些地方似乎是為了用spring而用spring了,反而有些不夠漂亮。設(shè)想一下,如果只用timer?真的不能寫出更簡潔的代碼么?有機會的話可以討論討論,我也發(fā)現(xiàn)在用spring的過程中,經(jīng)常會犯這樣的問題,設(shè)計問題向spring上去靠:)

    頭一次看到你的地盤,不當(dāng)之處海涵:)  回復(fù)  更多評論   

    # re: 一個定時更新cache框架 2007-01-03 22:22 pesome

    呵呵,首先一開始就知道spring+quarzt能實現(xiàn)這個功能,能直接拿來用,就沒有考慮太多。timer以前用過,但比較粗淺。用spring主要是懶得寫單例和配置文件,也的確是越來越依賴它了。  回復(fù)  更多評論   

    <2006年12月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    導(dǎo)航

    統(tǒng)計

    公告

    主要記錄作者在學(xué)習(xí)java中的每一步足跡。除非特別說明,所有文章均為本blog作者原創(chuàng),如需轉(zhuǎn)載請注明出處和原作者,如用于商業(yè)目的,需跟作者本人聯(lián)系。
    歡迎大家訪問:

    常用鏈接

    留言簿(16)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊

    收藏夾

    java技術(shù)

    人間百態(tài)

    朋友們的blog

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产公开免费人成视频| 亚洲youwu永久无码精品| 全部免费毛片在线| 国产精品怡红院永久免费| 久久不见久久见免费影院www日本 久久WWW免费人成—看片 | 在线播放免费人成视频在线观看| 久久免费线看线看| www.xxxx.com日本免费| 怡红院亚洲红怡院在线观看| 亚洲国产品综合人成综合网站| 亚洲成av人影院| 中文字幕亚洲专区| 亚洲精品专区在线观看| 国产男女猛烈无遮挡免费视频网站| 4hu四虎最新免费地址| 99久久精品免费视频| 久久久久久AV无码免费网站下载| 国产日韩精品无码区免费专区国产| 免费看一级一级人妻片| 亚洲av无码一区二区三区人妖| 在线综合亚洲中文精品| 亚洲天堂电影在线观看| 亚洲综合在线观看视频| 亚洲国产精品久久久久婷婷软件 | 亚洲精品无码aⅴ中文字幕蜜桃| 亚洲激情视频网站| 亚洲精品视频专区| 亚洲麻豆精品果冻传媒| 亚洲黄色一级毛片| 亚洲乱码卡一卡二卡三| 亚洲AV无码专区在线亚| 最新亚洲卡一卡二卡三新区| 亚洲成_人网站图片| 亚洲乱理伦片在线观看中字| 亚洲日韩国产一区二区三区在线| 亚洲人成小说网站色| 亚洲高清国产拍精品熟女| 国产亚洲精品2021自在线| 成年免费a级毛片| 久青草视频97国内免费影视| 国产自国产自愉自愉免费24区|