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

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

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

    我的Java路上那些事兒

    快樂(lè)成長(zhǎng)
    posts - 110, comments - 101, trackbacks - 0, articles - 7
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
    用java寫服務(wù)程序時(shí)經(jīng)常會(huì)涉及到監(jiān)控某些配置文件,當(dāng)配置文件發(fā)生變化時(shí)實(shí)時(shí)重新加載該文件的內(nèi)容到內(nèi)存.
    實(shí)際上log4j里有現(xiàn)成的類FileWatchdog做了類似的工作.我們只需繼承它,然后重寫它的一些方法就可以了.
     
       /**使用log4j的監(jiān)控狗 */
        
    public class IPAccessFileWatchdog extends FileWatchdog {
            
    public IPAccessFileWatchdog(String filename){
                
    super(filename);
            }


            
    public void doOnChange() {
                List
    <String> list = IPAccessController.this.loadIPRule(new File(this.filename));
                
    if (list != null{
                    IPAccessController.
    this.ipRule = list.toArray(new String[list.size()]);
                }
     else {
                    IPAccessController.
    this.ipRule = null;
                }

                LogLog.warn(
    "ip access config load completed from file:" + filename);
            }

        }

    }


    FileWatchdog的代碼也很簡(jiǎn)單,其實(shí)就是起一個(gè)線程,每隔固定的時(shí)間掃描一次監(jiān)控的文件.我把代碼也貼出來(lái):'


    // Contributors:  Mathias Bogaert

    package org.apache.log4j.helpers;

    import java.io.File;
    import org.apache.log4j.helpers.LogLog;

    public abstract class FileWatchdog extends Thread {

      
      
    static final public long DEFAULT_DELAY = 60000
      
      
    protected String filename;
      
      
      
    protected long delay = DEFAULT_DELAY; 
      
      File file;
      
    long lastModif = 0
      
    boolean warnedAlready = false;
      
    boolean interrupted = false;

      
    protected
      FileWatchdog(String filename) 
    {
       
    this.filename = filename;
       file 
    = new File(filename);
       setDaemon(
    true);
       checkAndConfigure();
      }


      
      
    public
      
    void setDelay(long delay) {
       
    this.delay = delay;
      }


      
    abstract 
      
    protected 
      
    void doOnChange();

      
    protected
      
    void checkAndConfigure() {
       
    boolean fileExists;
       
    try {
        fileExists 
    = file.exists();
       }
     catch(SecurityException  e) {
        LogLog.warn(
    "Was not allowed to read check file existance, file:["+
     filename
    +"].");
        interrupted 
    = true// there is no point in continuing
        return;
       }


       
    if(fileExists) {
        
    long l = file.lastModified(); // this can also throw a SecurityException
        if(l > lastModif) {      // however, if we reached this point this
    lastModif = l;        // is very unlikely.
    doOnChange();
    warnedAlready 
    = false;
        }

       }
     else {
        
    if(!warnedAlready) {
    LogLog.debug(
    "["+filename+"] does not exist.");
    warnedAlready 
    = true;
        }

       }

      }


      
    public
      
    void run() {   
       
    while(!interrupted) {
        
    try {
      Thread.sleep(delay);
        }
     catch(InterruptedException e) {
    // no interruption expected
        }

        checkAndConfigure();
       }

      }

    }



    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲午夜免费视频| 中文字幕手机在线免费看电影| 久久99热精品免费观看动漫 | 亚洲日本天堂在线| 欧美大尺寸SUV免费| 亚洲最大中文字幕| 一级女人18毛片免费| 亚洲导航深夜福利| 国产成人免费爽爽爽视频| 亚洲熟妇AV乱码在线观看| 浮力影院第一页小视频国产在线观看免费 | 亚洲av无码兔费综合| 日本一道一区二区免费看| 国产区图片区小说区亚洲区| 国产一级一片免费播放| 国产特黄特色的大片观看免费视频| 国产亚洲精品高清在线| 三年在线观看免费观看完整版中文| 亚洲AV日韩AV永久无码久久| 99久热只有精品视频免费看| 亚洲入口无毒网址你懂的| 破了亲妺妺的处免费视频国产| 免费看又黄又爽又猛的视频软件| 中文字幕中韩乱码亚洲大片| 久久免费精品视频| 亚洲一区二区三区久久久久| 国产国产人免费人成免费视频| 国产免费播放一区二区| 亚洲黄色高清视频| 日本一线a视频免费观看| 国产精品免费久久久久电影网| 亚洲一区二区三区四区在线观看| 国产精品成人免费视频网站京东 | 亚洲阿v天堂在线| 黄在线观看www免费看| 亚洲av永久无码| 亚洲AV日韩AV永久无码下载| 岛国片在线免费观看| 伊人免费在线观看高清版| 亚洲国产成人精品无码区在线网站| 免费成人黄色大片|