定時執行任務的三種方法:
1)java.util.Timer.
2)ServletContextListener.
3)org.springframework.scheduling.timer.ScheduledTimerTask
1)java.util.Timer
這個方法應該是最經常使用的,不過這個方法須要手工啓動你的任務:
Timer timer=new Timer();
timer.schedule(new ListByDayTimerTask(),10000,86400000);
這裏的ListByDayTimerTask類必須extends TimerTask裏面的run()方法。
2)ServletContextListener
這個方法在web容器環境比較方便,這樣,在web server啓動後就能夠自動運行該任務,不須要手工操做。
將ListByDayListener implements ServletContextListener接口,在contextInitialized方法中加入啓動Timer的代碼,在 contextDestroyed方法中加入cancel該Timer的代碼;而後在web.xml中,加入listener:
<-listener>
<-listener-class>com.qq.customer.ListByDayListener</listener-class>
<-/listener>
3)org.springframework.scheduling.timer.ScheduledTimerTask若是你用spring,那麼你不須要寫Timer類了,在schedulingContext-timer.xml中加入下面的內容就能夠了:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="timer" class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<list>
<ref local="MyTimeTask1"/>
</list>
</property>
</bean>
<bean id="MyTimeTask" class="com.qq.timer.ListByDayTimerTask"/>
<bean id="MyTimeTask1" class="org.springframework.scheduling.timer.ScheduledTimerTask">
<property name="timerTask">
<ref bean="MyTimeTask"/>
</property>
<property name="delay">
<value>10000</value>
</property>
<property name="period">
<value>86400000</value>
</property>
</bean>
</beans>
以上內容轉載自:http://dev.csdn.net/author/xtpdcsse/ec8e8080a5b04fa79e7d4828bc807d3f.html
下面是個人實現。
1)利用java.util.Timer. 代碼以下
<1>StartThread.java
- package com.jview.main;<BR>
- import java.util.Date;<BR>
- import java.util.Timer;<BR>
- import java.util.TimerTask;<BR>
- import org.apache.log4j.Logger;<BR>
- public class StartThreadextends Thread {<BR>
- private static Logger logger = Logger.getLogger("StartThread");<BR>
- public static final int EXECUTE_CYC = 86400000;
- int startH = 9;<BR>
- int startM = 52;<BR>
- private Timer _timer ;<BR>
- private Date _statDate;<BR>
- private Date _nowDate;<BR>
- public StartThread(){<BR>
- _nowDate = new Date();<BR>
- _timer = new Timer();<BR>
- _statDate = newDate(_nowDate.getYear(),_nowDate.getMonth(),_nowDate.getDate(),startH,startM);<BR>
- }<BR>
- public void StartUp(){<BR>
- _timer.schedule(<BR>
- new TimerTask() {<BR>
- public void run()<BR>
- {<BR>
- logger.info("開始統計...");<BR>
- try {<BR>
- Class.forName("com.jview.stat.StatPlan").newInstance();<BR>
- } catch (InstantiationException e) {<BR>
-
- e.printStackTrace();<BR>
- } catch (IllegalAccessException e) {<BR>
-
- e.printStackTrace();<BR>
- } catch (ClassNotFoundException e) {<BR>
-
- e.printStackTrace();<BR>
- }<BR>
- }<BR>
- },_statDate,EXECUTE_CYC);<BR>
- }<BR>
- public static void main(String[] args) {<BR>
- StartThread _statUp = new StartThread();<BR>
- _statUp.StartUp();<BR>
- } <BR>
- }
- package com.jview.main;
-
- import java.util.Date;
-
- import java.util.Timer;
-
- import java.util.TimerTask;
-
- import org.apache.log4j.Logger;
-
- public class StartThread extends Thread {
-
- private static Logger logger = Logger.getLogger("StartThread");
-
- public static final int EXECUTE_CYC = 86400000;
-
- int startH = 9;
-
- int startM = 52;
-
- private Timer _timer ;
-
- private Date _statDate;
-
- private Date _nowDate;
-
- public StartThread(){
-
- _nowDate = new Date();
-
- _timer = new Timer();
-
- _statDate = new Date(_nowDate.getYear(),_nowDate.getMonth(),_nowDate.getDate(),startH,startM);
-
- }
-
- public void StartUp(){
-
- _timer.schedule(
-
- new TimerTask() {
-
- public void run()
-
- {
-
- logger.info("開始統計...");
-
- try {
-
- Class.forName("com.jview.stat.StatPlan").newInstance();
-
- } catch (InstantiationException e) {
-
-
-
- e.printStackTrace();
-
- } catch (IllegalAccessException e) {
-
-
-
- e.printStackTrace();
-
- } catch (ClassNotFoundException e) {
-
-
-
- e.printStackTrace();
-
- }
-
- }
-
- },_statDate,EXECUTE_CYC);
-
- }
-
- public static void main(String[] args) {
-
- StartThread _statUp = new StartThread();
-
- _statUp.StartUp();
-
- }
-
- }
<2>StatPlan.java
- package com.jview.stat;<BR>
- import java.util.Calendar;<BR>
- import org.apache.log4j.Logger;<BR>
- public class StatPlan {<BR>
- <BR>
- <BR>
- private static Logger logger = Logger.getLogger("StatPlan");<BR>
- private int i = 0;<BR>
- private StatPlanService _sps ;<BR>
- public StatPlan(){<BR>
- _sps = new StatWeekPlan();<BR>
- statPlan();<BR>
- }<BR>
- <BR>
- public void statPlan(){<BR>
- Calendar _c = Calendar.getInstance();<BR>
- logger.info("stat plan ... 執行"+ i +"次,時間:"+_c.getTime());<BR>
- _sps.StatPlan();<BR>
- i++;<BR>
- for(int i = 0; i<9999;i++){<BR>
- if(i==0 || i==9998){<BR>
- logger.info(""+i);<BR>
- }<BR>
- }<BR>
- }<BR>
- }
- package com.jview.stat;
-
- import java.util.Calendar;
-
- import org.apache.log4j.Logger;
-
- public class StatPlan {
-
-
-
-
-
- private static Logger logger = Logger.getLogger("StatPlan");
-
- private int i = 0;
-
- private StatPlanService _sps ;
-
- public StatPlan(){
-
- _sps = new StatWeekPlan();
-
- statPlan();
-
- }
-
-
-
- public void statPlan(){
-
- Calendar _c = Calendar.getInstance();
-
- logger.info("stat plan ... 執行"+ i +"次,時間:"+_c.getTime());
-
- _sps.StatPlan();
-
- i++;
-
- for(int i = 0; i<9999;i++){
-
- if(i==0 || i== 9998){
-
- logger.info(""+i);
-
- }
-
- }
-
- }
-
- }
<3>StatWeekPlan .java
- import org.apache.log4j.Logger;<BR>
- <BR>
- public class StatWeekPlanextends StatPlanService {<BR>
- private static Logger logger = Logger.getLogger("StatWeekPlan");<BR>
- public void StatPlan(){<BR>
- logger.info("this is statWeekPlan");<BR>
- }<BR>
- }<BR>
- <4>StatPlanService .java<BR>
- public class StatPlanService {<BR>
- public void StatPlan(){ <BR>
- }<BR>
- }
- import org.apache.log4j.Logger;
-
-
-
- public class StatWeekPlan extends StatPlanService {
-
- private static Logger logger = Logger.getLogger("StatWeekPlan");
-
- public void StatPlan(){
-
- logger.info("this is statWeekPlan");
-
- }
-
- }
-
- <4>StatPlanService .java
-
- public class StatPlanService {
-
- public void StatPlan(){
-
- }
-
- }
2)ServletContextListener.實現
<1> SysStatListener .java
- import java.util.Date;<BR>
- import java.util.Timer;<BR>
- import java.util.TimerTask;<BR>
- import javax.servlet.ServletContextEvent;<BR>
- import javax.servlet.ServletContextListener;<BR>
- import org.apache.log4j.Logger;<BR>
- public class SysStatListenerimplements ServletContextListener{<BR>
- private static Logger logger = Logger.getLogger("ListByDayListener");<BR>
- private StatTask _sTask;<BR>
- public void contextDestroyed(ServletContextEvent scevent) {<BR>
- String status = "中止系通通計線程";<BR>
- scevent.getServletContext().log(status);<BR>
- logger.info(status);<BR>
- _sTask.shutDown();<BR>
- }<BR>
- public void contextInitialized(ServletContextEvent scevent) {<BR>
- String status = "啓動系通通計線程";<BR>
- scevent.getServletContext().log(status);<BR>
- logger.info(status);<BR>
- _sTask = new StatTask();<BR>
- _sTask.startUp();<BR>
- }<BR>
- }
- import java.util.Date;
-
- import java.util.Timer;
-
- import java.util.TimerTask;
-
- import javax.servlet.ServletContextEvent;
-
- import javax.servlet.ServletContextListener;
-
- import org.apache.log4j.Logger;
-
- public class SysStatListener implements ServletContextListener{
-
- private static Logger logger = Logger.getLogger("ListByDayListener");
-
- private StatTask _sTask;
-
- public void contextDestroyed(ServletContextEvent scevent) {
-
- String status = "中止系通通計線程";
-
- scevent.getServletContext().log(status);
-
- logger.info(status);
-
- _sTask.shutDown();
-
- }
-
- public void contextInitialized(ServletContextEvent scevent) {
-
- String status = "啓動系通通計線程";
-
- scevent.getServletContext().log(status);
-
- logger.info(status);
-
- _sTask = new StatTask();
-
- _sTask.startUp();
-
- }
-
- }
<2> StatTask .java
- import java.util.Date;<BR>
- import java.util.Timer;<BR>
- import java.util.TimerTask;<BR>
- import org.apache.log4j.Logger;<BR>
- public class StatTaskextends Thread {<BR>
- private static Logger logger = Logger.getLogger("StartThread");<BR>
- public staticfinal int EXECUTE_CYC =86400000;<BR>
- int startH = 9;<BR>
- int startM = 52;<BR>
- private Timer _timer ;<BR>
- private Date _statDate;<BR>
- private Date _nowDate;<BR>
- public StatTask(){<BR>
- _nowDate = new Date();<BR>
- _timer = new Timer();<BR>
- _statDate = newDate(_nowDate.getYear(),_nowDate.getMonth(),_nowDate.getDate(),startH,startM);<BR>
- }<BR>
- public void startUp(){<BR>
- _timer.schedule(<BR>
- new TimerTask() {<BR>
- public void run()<BR>
- {<BR>
- logger.info("開始統計...");<BR>
- try {<BR>
- Class.forName("com.jview.stat.StatPlan").newInstance();<BR>
- } catch (InstantiationException e) {<BR>
-
- e.printStackTrace();<BR>
- } catch (IllegalAccessException e) {<BR>
-
- e.printStackTrace();<BR>
- } catch (ClassNotFoundException e) {<BR>
-
- e.printStackTrace();<BR>
- }<BR>
- }<BR>
- },_statDate,EXECUTE_CYC);<BR>
- }<BR>
- public void shutDown(){<BR>
- _timer.cancel();<BR>
- }
- import java.util.Date;
-
- import java.util.Timer;
-
- import java.util.TimerTask;
-
- import org.apache.log4j.Logger;
-
- public class StatTask extends Thread {
-
- private static Logger logger = Logger.getLogger("StartThread");
-
- public static final int EXECUTE_CYC = 86400000;
-
- int startH = 9;
-
- int startM = 52;
-
- private Timer _timer ;
-
- private Date _statDate;
-
- private Date _nowDate;
-
- public StatTask(){
-
- _nowDate = new Date();
-
- _timer = new Timer();
-
- _statDate = new Date(_nowDate.getYear(),_nowDate.getMonth(),_nowDate.getDate(),startH,startM);
-
- }
-
- public void startUp(){
-
- _timer.schedule(
-
- new TimerTask() {
-
- public void run()
-
- {
-
- logger.info("開始統計...");
-
- try {
-
- Class.forName("com.jview.stat.StatPlan").newInstance();
-
- } catch (InstantiationException e) {
-
-
-
- e.printStackTrace();
-
- } catch (IllegalAccessException e) {
-
-
-
- e.printStackTrace();
-
- } catch (ClassNotFoundException e) {
-
-
-
- e.printStackTrace();
-
- }
-
- }
-
- },_statDate,EXECUTE_CYC);
-
- }
-
- public void shutDown(){
-
- _timer.cancel();
-
- }
<3>在web.xml中添加下面的內容(注:下面的內容放到<filter-
mapping>的後面)
<listener>
<listener-class>com.jview.auto.stat.SysStatListener </listener-class>
</listener>