java自动监听任务 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);
        }
    }

}

你可能感兴趣的:(java自动监听任务 PropertiesTask)