Java Web 定时任务

测试过,可用。源博:http://blog.csdn.net/freeglad/article/details/3164706

在工程的WEB-INF/web.xml配置文件中加入如下三行,所计划的任务就会在Web容器(或服务器)启动时自动开始执行了:   

<listener>   
    <listener-class>com.xxh.autoTask.ProjectServletContextListner</listener-class>   
</listener> 

ProjectServletContextListner.java
package com.xxh.autoTask;

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

public class ProjectServletContextListner implements ServletContextListener {

    //定时器   
    private static java.util.Timer timer = null; 
    
    
    //此方法仅在关闭Web容器(或服务器)时被调用一次   
    public void contextDestroyed(ServletContextEvent event) {
        // TODO Auto-generated method stub        
        timer.cancel();  
        event.getServletContext().log("定时器已销毁,任务执行结束");
    }

    //此方法仅在起动Web容器(或服务器)时被调用一次   
    public void contextInitialized(ServletContextEvent event) {
        // TODO Auto-generated method stub        
        timer = new java.util.Timer(true);  
        javax.servlet.ServletContext ctx = event.getServletContext();  
        ctx.log("定时器已启动,任务开始执行");  
        /*  
        //如果是用web.xml文件配置参数,则用下面的方式读取参数设置值  
        long   period   =   Long.valueOf((String)ctx.getInitParameter("period")).longValue();  
        */  
 
        timer.schedule(new NewTask(),   //   所需要执行的任务  
                         0,             //   延迟时间(0 --- 表示起动Web容器(或服务器)就立即执行此任务)  
                         30*1000        //   任务的执行间隔时间[单位:毫秒]   (此处的间隔时间是30秒)  
                       );  
    }

}


CustomTask.java
package com.xxh.autoTask;

public interface CustomTask {
    
    /**  
     *   用于实现自定义的任务  
     */  
    public   void   execute();  

}

CustomTask.java
package com.xxh.autoTask;

public class MyTask implements CustomTask {

    public void execute() {
        // TODO Auto-generated method stub
        System.out.println("在此方法中实现任务的主体");
    }

}


NewTask.java
package com.xxh.autoTask;

import java.util.TimerTask;

public class NewTask extends TimerTask {

    private static boolean isRunning  = false;   //运行标志(表示是否正在运行计划的任务)  
    private static int t = 3;
    private CustomTask ct = TaskFactory.getTask();   
    
    @Override
    public void run() {
        // TODO Auto-generated method stub
        if(!isRunning){   //当未执行此任务时则开始执行  
            if(ct != null){  
                isRunning = true;    //将任务执行标志设置为正在执行  
                ct.execute();        //执行任务  
                isRunning = false;   //将任务执行标志设置为执行完毕  
            }else{  
                if(t == 0)   return;  
                t--;  
                System.out.println();  
                System.out.println("[Error] [com.xxh.autoTask.NewTask]  The   task   is   null.");  
                System.out.println("[Error] [com.xxh.autoTask.NewTask]  The   task   is   null.");  
                System.out.println("[Error] [com.xxh.autoTask.NewTask]  The   task   is   null.");  
            }  
        }else{  
            System.out.println("The   task   is   running.");  
        }   

    }

}


TaskFactory.java
package com.xxh.autoTask;

public class TaskFactory {

    /**  
     *   功能:返回实现了CustomTask接口的类的实例对象  
     *  
     *  
     *   例:   如果实现了CustomTask接口的类名是MyTask,  
     *               return   new   MyTask();  
     *           如上这样就可以了.  
     */  
   public   static   CustomTask   getTask(){  
       return new MyTask();
   } 
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Java EE中的定时任务框架Quartz来实现每天定时执行任务。具体实现方法如下: 1. 在pom.xml文件中添加Quartz依赖: ``` <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version> </dependency> ``` 2. 在web.xml文件中配置Quartz的监听器: ``` <listener> <listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class> </listener> ``` 3. 创建一个Quartz定时任务类,实现Job接口: ``` public class MyJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { // 执行具体的任务逻辑 System.out.println("执行定时任务..."); } } ``` 4. 在项目启动时,使用Quartz的Scheduler类来创建定时任务: ``` // 创建调度器 SchedulerFactory sf = new StdSchedulerFactory(); Scheduler scheduler = sf.getScheduler(); // 创建任务 JobDetail jobDetail = JobBuilder.newJob(MyJob.class) .withIdentity("myJob", "group1") .build(); // 创建触发器 Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("myTrigger", "group1") .withSchedule(CronScheduleBuilder.dailyAtHourAndMinute(0, 0)) // 每天0点执行 .build(); // 将任务和触发器放入调度器中 scheduler.scheduleJob(jobDetail, trigger); // 启动调度器 scheduler.start(); ``` 上述代码中,使用Cron表达式来设置每天的执行时间。具体的Cron表达式语法可以参考Quartz官方文档。 这样,就可以实现每天定时执行任务了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值