java定时任务问题,每隔一段时间执行。

时间:2021-09-06 15:54:57

写一个listener 继承 ServletContextListener 在web.xml中配置。
listener的contextInitialized方法内创建一个定时执行的线程就好了。

我解决的问题是最近做的微信小程序项目中,定时删除用户上传文件的问题,,

我每个24小时检查一次,删除上传时间超过一天的图片,


/*
监听上下文,加载配置
实现ServletContextListener,实现相应方法
 */
public class ListenerLoadConfig implements ServletContextListener{
public static final long TOKEN_CHECKED_TIME=24*60*60*1000;
@Override
    public void contextDestroyed(ServletContextEvent sce){
}
@Override
    public void contextInitialized(ServletContextEvent event){
        //加载数据库配置文件
        String path=event.getServletContext().getRealPath("/WEB-INF/config/dbconfig.properties");
        LoadDBconfig.load(path);
        System.out.println(DBUtill.getConn());
         Timer t=new Timer();
        t.schedule(new MyTimer(),0,TOKEN_CHECKED_TIME);

}
}


public class MyTimer extends TimerTask {
    public void deleteFolder(File file){
        File[] files=file.listFiles();
        for(File f:files){
            System.out.println(new Date().getTime());
            //24*60*60*1000
            if(new Date().getTime()-f.lastModified()>=24*60*60*1000*10){
                System.out.println("删除文件"+f.getName());
                f.delete();
            }
        }
    }
    public void run(){
        File file=new File("/root/apache-tomcat-8.0.52/webapps/upload");
        deleteFolder(file);
    }
    /*public static void main(String[] args){
        Timer t=new Timer();
        t.schedule(new MyTimer(),0,24*60*60*1000);
    }*/
}