关于java定时任务

来源:互联网 发布:php 服务器基础知识 编辑:程序博客网 时间:2024/06/06 01:12

很多时候,java定时任务是很有必要的,我尝试了,用了两个方法,记录一下

方法一:使用ServletContextListener + Timer + timerTask

新建类继承ServletContextListener ,在初始化方法contextInitialized里写你定时器及任务,然后在web.xml配置一个监听,让服务启动时,加载这个类,运行你的定时任务.

 

 

java code

-------------------------

package com.util;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Timer;import java.util.TimerTask;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import com.dao.UserDao;public class MyListener implements ServletContextListener { Timer timer = null;//定时器 TimerTask ts = null;//任务类 public void contextDestroyed(ServletContextEvent arg0) {  if(timer!=null){   timer.cancel();//当服务停止时,会调用该销毁方法,在这里停止该定时器的一切任务  } } public void contextInitialized(ServletContextEvent arg0) {  timer = new Timer();  Date date = new Date();//运行的时间  date.setHours(23);//设置小时  date.setMinutes(55);//设置分钟  date.setSeconds(0);//设置秒    ts = new TimerTask(){//实例任务类   public void run(){    //真正要做的事情写在这   }  };      /* 开始定时任务,参数一是任务实例,参数二是隔多长时间或规定在什么时候执行,参数三是执行完后再隔多少长时间执行   * 例:timer.schedule(ts, date,24*60*60*1000)   *  在当天的23点55分0秒时执行,执行完后,隔24小时再执行*/  timer.schedule(ts, date,24*60*60*1000);    }}



 

 

 

-------------------------

 

web.xml

-------------------------

 <listener> <listener-class>com.util.MyListener</listener-class> </listener>


-------------------------

 

方法二:利用spirng提供的任务调度

在配置中,指定类,方法,指定时间,然后在总调度器注册一下,相当简单,不过,要加入几个jar包

分别是:commons-collections-3.2.1.jar,quartz-all-1.6.0.jar,spring.jar

 

beans.xml

-------------------------

<!-- 任务类,每天固定任务,这里写自己的普通类 --> <bean id="EveryDayTasks" class="com.util.EveryDayTasks">  <property name="elementDAO" ref="TbElementDAO" />  <property name="elementlogDAO" ref="TbElementlogDAO" /> </bean> <!-- 任务类具体信息 --> <bean id="jdEveryDayTasks"  class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  <property name="targetObject" ref="EveryDayTasks" />  <property name="targetMethod" value="doIt" />  <property name="concurrent" value="false" /> </bean> <!-- 任务类的进阶封装,指定具体日期循环执行 每天23:56:00执行一次--> <bean id="ctjdEveryDayTasks"  class="org.springframework.scheduling.quartz.CronTriggerBean">  <property name="jobDetail" ref="jdEveryDayTasks" />  <property name="cronExpression" value="0 56 23 * * ?" /> </bean> <!-- 总任务调度器 --> <bean  class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  <property name="triggers">   <list>    <ref bean="ctjdEveryDayTasks" />   </list>  </property> </bean>


原创粉丝点击