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

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

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

    J2EE社區

    茍有恒,何必三更起五更眠;
    最無益,只怕一日曝十日寒.
    posts - 241, comments - 318, trackbacks - 0, articles - 16

    Java 實現自動監聽并更新配置文件內容

    Posted on 2010-11-05 11:49 xcp 閱讀(3301) 評論(0)  編輯  收藏 所屬分類: JAVA

     

    自動監聽器 PropertiesListener

    package org.stephencat.listener;

    import javax.servlet.*;

    /**
     * 自動監聽器
     * 
    @author stephen
     *
     
    */
    public class PropertiesListener implements ServletContextListener  {
        
        
    /**
         * 自動監聽時鐘
         
    */
        
    private PropertiesTimer rt = null;
        
        
    public void contextInitialized(ServletContextEvent event) {
            String status 
    = "Properties listener start .";
            event.getServletContext().log(status);
            System.out.println(status);
            
            
    // 激活自動監聽時鐘
            rt = new PropertiesTimer(15, event.getServletContext());
            rt.start();
        }
        
        
    public void contextDestroyed(ServletContextEvent event) {
            String status 
    = "Properties listener stop .";
            event.getServletContext().log(status);
            System.out.println(status);
            
            
    // 停止自動監聽時鐘
            if (rt != null) {
                rt.stop();
            }
        }
    }

    自動監聽時鐘 PropertiesTimer

    package org.stephencat.listener;
    import java.util.*;
    import javax.servlet.*;


    /**
     * 自動監聽時鐘
     * 
    @author stephen
     *
     
    */
    public class PropertiesTimer {
        
        
    private final Timer timer = new Timer();
        
    private final int sec;
        
    private ServletContext context = null;
        
        
    public PropertiesTimer(int seconds, ServletContext context) {
            sec 
    = seconds;
            
    this.context = context;
        }
        
        
    /**
         * 啟動自動監聽任務
         
    */
        
    public void start() {
            
            
    // 取得當前日期時間
            Date date = new Date();
            
            
    // 執行自動監聽計劃
            timer.schedule(new PropertiesTask(this.context), date, sec * 1000);
        }
        
        
    /**
         * 停止自動監聽任務
         
    */
        
    public void stop() {
            timer.cancel();

        }

    }

    自動監聽任務 PropertiesTask

    package org.stephencat.listener;
    import java.io.IOException;
    import java.io.*;
    import java.util.*;

    import javax.servlet.*;
    /**
     * 自動監聽任務
     * 
    @author stephen
     *
     
    */
    public class PropertiesTask extends TimerTask {
        
        
    private ServletContext context = null;
        
    /**
         * 配置文件的最后更新時間
         
    */
        
    private long lastModified = 0;
        
        
    /**
         * 構造一個自動更新任務
         * 
    @param context
         
    */
        
    public PropertiesTask(ServletContext context){
            
    this.context = context;
            System.out.println(
    "A task instance is created now."); // 任務在整個 application 周期內只創建一次。
        }
        
        
    /**
         * 每次執行任務時顯示一個隨機數。
         
    */
        
    public void todoTestRandom(){
            System.out.println(
    "Task running");
            context.setAttribute(
    "random", String.valueOf(Math.random()));
            System.out.println((String)context.getAttribute(
    "random"));
        }
        
        
    /**
         * 監聽配置文件是否被更新。
         
    */
        
    public void todoTestFileStatus(){
            System.out.println(
    "Getting file status");
            System.out.println(
    this.isFileUpdated("WEB-INF/platforms/test.properties"));
        }
        
        
    /**
         * 監聽配置文件是否被更新,自動更新文件中的配置項存儲到 application 變量中。
         
    */
        
    public void todo(){
            String filename 
    = "WEB-INF/platforms/test.properties";
            
    if(this.isFileUpdated(filename)){
                
                System.out.println(
    "Getting properties");
                
    try{
                    
    this.loadProperties("test", filename);
                }
    catch(IOException ioe){
                    System.err.println(ioe.getMessage());
                }
            }
            System.out.println(
    "Test value is: " + this.getTestProperty("name"));
        }
        
        
    public void run() {
            todoTestRandom();
            todo();
            
    //todo();
        }
        
        
    /**
         * 判斷物理文件是否已被更新
         * 
    @param filename 物理文件名
         * 
    @return 是 true 否 false
         
    */
        
    private boolean isFileUpdated(String filename){
            File file 
    = new File(context.getRealPath(filename));
            
    if(file.isFile()){
                
    long lastUpdateTime = file.lastModified();
                
    if(lastUpdateTime > this.lastModified){
                    System.out.println(
    "The properties file was modified.");
                    
    this.lastModified = lastUpdateTime;
                    
    return true;
                }
    else{
                    System.out.println(
    "The properties file was not modified.");
                    
    return false;
                }
            }
    else{
                System.out.println(
    "The path does not point to a file.");
                
    return false;
            }
        }
        
        
    /**
         * 獲取配置文件
         * 
    @param key
         * 
    @param filename
         * 
    @return
         
    */
        
    public void loadProperties(String key, String filename) throws IOException{
            Properties prop 
    = new Properties();
            InputStream stream 
    = context.getResourceAsStream(filename);
            prop.load(stream);
            
    if(stream!=null){
                stream.close();
            }
            context.setAttribute(key, prop);
        }
        
        
    /**
         * 從 application 取配置項的值
         * 
    @param key 配置項的鍵名
         * 
    @return 配置項的值
         
    */
        
    public String getTestProperty(String key){
            Properties prop 
    = (Properties)context.getAttribute("test");
            
    if(prop==null){
                
    return null;
            }
    else{
                
    return (String)prop.get(key);
            }
        }

    }

    web.xml 配置

    <?xml version="1.0" encoding="GB18030"?>
    <web-app version="2.4" 
        xmlns
    ="http://java.sun.com/xml/ns/j2ee" 
        xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation
    ="http://java.sun.com/xml/ns/j2ee 
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    >
         
    <listener>
        
    <listener-class>org.stephencat.listener.PropertiesListener</listener-class>
    </listener>    
    </web-app>

    在 WEB-INF 目錄下增加 platforms/test.properties 文件

    name=Stephen Wong

    啟動應用服務器,控制臺輸出如下:

    11:30:31,000 INFO  [TomcatDeployer] undeploy, ctxPath=/ServerTest, warUrl=.../deploy/ServerTest.war/
    11:30:31,000 INFO  [[/ServerTest]] Properties listener stop .
    11:30:31,000 INFO  [STDOUT] Properties listener stop .
    11:30:31,046 INFO  [TomcatDeployer] deploy, ctxPath=/ServerTest, warUrl=.../deploy/ServerTest.war/
    11:30:31,359 INFO  [[/ServerTest]] Properties listener start .
    11:30:31,359 INFO  [STDOUT] Properties listener start .
    11:30:31,375 INFO  [STDOUT] A task instance is created now.
    11:30:31,390 INFO  [STDOUT] Task running
    11:30:31,390 INFO  [STDOUT] 0.9924364802139768
    11:30:31,390 INFO  [STDOUT] The properties file was modified.
    11:30:31,390 INFO  [STDOUT] Getting properties
    11:30:31,390 INFO  [STDOUT] Test value is: Stephen
    11:30:46,390 INFO  [STDOUT] Task running
    11:30:46,390 INFO  [STDOUT] 0.24869896604923036
    11:30:46,390 INFO  [STDOUT] The properties file was not modified.
    11:30:46,390 INFO  [STDOUT] Test value is: Stephen
    11:31:01,390 INFO  [STDOUT] Task running
    11:31:01,390 INFO  [STDOUT] 0.47994173379307203
    11:31:01,390 INFO  [STDOUT] The properties file was not modified.
    11:31:01,390 INFO  [STDOUT] Test value is: Stephen
    11:31:16,390 INFO  [STDOUT] Task running
    11:31:16,390 INFO  [STDOUT] 0.6379331056768383
    11:31:16,390 INFO  [STDOUT] The properties file was modified.
    11:31:16,390 INFO  [STDOUT] Getting properties
    11:31:16,390 INFO  [STDOUT] Test value is: Stephen Wong
    11:31:31,390 INFO  [STDOUT] Task running
    11:31:31,390 INFO  [STDOUT] 0.30415561271978353
    11:31:31,390 INFO  [STDOUT] The properties file was not modified.
    11:31:31,390 INFO  [STDOUT] Test value is: Stephen Wong
    11:31:46,390 INFO  [STDOUT] Task running
    11:31:46,390 INFO  [STDOUT] 0.03696303208126983
    11:31:46,390 INFO  [STDOUT] The properties file was not modified.
    11:31:46,390 INFO  [STDOUT] Test value is: Stephen Wong








    我自己地例子

    package cn.gov.luzhou.SiteServer.gate.web.filter;

    import javax.servlet.ServletContext;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;

    import cn.gov.luzhou.SiteServer.gate.buiness.service.SysUserService;
    import cn.gov.luzhou.SiteServer.gate.buiness.util.AppContext;

    /**
     *
     * @author  向才鵬
     * @version  1.0
     * Copyright (C), 2009,www.soujava.cn所有
     * Program Name:鵬哥偉業
     * Date: Nov 5, 2010 10:41:34 AM
     */
    @SuppressWarnings("unused")
    public class PropertiesListener implements ServletContextListener{
     private SysUserService userSev;
     
        private PropertiesTimer rt = null;
        public void contextInitialized(ServletContextEvent event) {
            String status = "updatecenter listener start .";
            event.getServletContext().log(status);
           
            ServletContext sc = event.getServletContext();
            if(sc.getInitParameter("udpateCenterSwitch").equals("open")){
              userSev = (SysUserService) AppContext.getBean("sysUserService");
                 // 激活自動監聽時鐘
                rt = new PropertiesTimer(15,sc,userSev);
                rt.start();
            }
        }
       
        public void contextDestroyed(ServletContextEvent event) {
            String status = "updatecenter listener stop .";
            event.getServletContext().log(status);
            System.out.println(status);
           
            // 停止自動監聽時鐘
            if (rt != null) {
                rt.stop();
            }
            userSev = null;
        }

       
     public SysUserService getUserSev() {
      return userSev;
     }

     public void setUserSev(SysUserService userSev) {
      this.userSev = userSev;
     }

     public PropertiesTimer getRt() {
      return rt;
     }

     public void setRt(PropertiesTimer rt) {
      this.rt = rt;
     }
    }





    package cn.gov.luzhou.SiteServer.gate.web.filter;

    import java.util.Date;
    import java.util.Timer;

    import javax.servlet.ServletContext;

    import cn.gov.luzhou.SiteServer.gate.buiness.service.SysUserService;


    /**
     *
     * @author  向才鵬
     * @version  1.0
     * Copyright (C), 2009,www.soujava.cn所有
     * Program Name:鵬哥偉業
     * Date: Nov 5, 2010 10:59:46 AM
     */
    public class PropertiesTimer {
     private final Timer timer = new Timer();
        private final int sec;
        private ServletContext context = null;
        private SysUserService userSev = null;
       
        public PropertiesTimer(int seconds, ServletContext context,SysUserService userSev) {
            sec = seconds;
            this.context = context;
        }
       
        /**
         * 啟動自動監聽任務
         */
        public void start() {
           
            // 取得當前日期時間
            Date date = new Date();
           
            // 執行自動監聽計劃
            timer.schedule(new PropertiesTask(this.context,userSev), date, sec * 1000);
        }
       
        /**
         * 停止自動監聽任務
         */
        public void stop() {
            timer.cancel();
            userSev = null;
        }
    }





    package cn.gov.luzhou.SiteServer.gate.web.filter;

    import java.sql.Timestamp;
    import java.util.Calendar;
    import java.util.TimerTask;

    import javax.servlet.ServletContext;

    import cn.gov.luzhou.SiteServer.gate.buiness.service.SysUserService;
    import cn.gov.luzhou.SiteServer.gate.buiness.util.AppContext;

    public class PropertiesTask extends TimerTask{
     private ServletContext context = null;
     SysUserService userSev = null;
        /**
      * 構造一個自動更新任務
      * @param context
      */
        public PropertiesTask(ServletContext context,SysUserService ttt){
            this.context = context;
            if(ttt==null){
             this.userSev = (SysUserService) AppContext.getBean("sysUserService");
            }else{
             this.userSev = ttt;
            }
        }
       
        public void run() {
            todoTestRandom();
            todo();
        }
       
        /**
      * 每次執行任務時顯示一個隨機數。
      */
        public void todoTestRandom(){
            context.setAttribute("random", String.valueOf(Math.random()));
        }
       
       
        /**
      * 自動更新文件中的配置項存儲到 application 變量中。
      */
        public void todo(){
         Timestamp st = new Timestamp(Calendar.getInstance().getTimeInMillis());
         context.log(st.toString()+"自動更新了數據");
         userSev.updateAll();
        }
    }





    名稱: ?4C.ESL | .↗Evon
    口號: 遇到新問題?先要尋找一個方案乄而不是創造一個方案こ
    mail: 聯系我


    主站蜘蛛池模板: 91精品视频在线免费观看| 区久久AAA片69亚洲| a毛片免费播放全部完整| 九九精品免费视频| 亚洲欧洲自拍拍偷综合| 99久久免费精品高清特色大片| 亚洲av激情无码专区在线播放| 玖玖在线免费视频| 亚洲国产精品美女久久久久| 2021免费日韩视频网| 亚洲一级毛片在线观| 国产情侣激情在线视频免费看| 免费看h片的网站| 亚洲成人动漫在线观看| 成人免费黄色网址| 亚洲成年网站在线观看| 成人毛片18岁女人毛片免费看| 成年午夜视频免费观看视频 | 亚洲成人激情小说| 性色av免费观看| 亚洲精品伦理熟女国产一区二区| 波多野结衣久久高清免费| 国产成人综合亚洲| 亚洲日本一区二区三区在线不卡| 久久成人永久免费播放| 精品国产_亚洲人成在线高清| 久久久精品免费视频| 亚洲韩国在线一卡二卡| 99久久99久久精品免费看蜜桃 | 免费一区二区三区| 久久久久亚洲精品日久生情| 91久久精品国产免费直播| 亚洲综合中文字幕无线码| 日本牲交大片免费观看| 无码人妻一区二区三区免费视频| 免费无码午夜福利片| 久久久久亚洲AV无码专区桃色| 成全视频免费观看在线看| 亚洲精品国产肉丝袜久久| 最近中文字幕无吗免费高清| 美女视频黄.免费网址|