JAVA中定時自動完成任務的實現要用到Java中的定時器TimerTask和監聽器,聽起來貌似有點困難但是實現起來還是比較容易的!紙老虎~~!
下面的列子很詳細,是關於定時向服務器上傳(也可以是其他的動作這是看需要關於上傳我博客有寫過可以參考)文件的列子簡單的4步就可以實現:
1:首先創建動作bean
package com.sun.time2;
public class UploadFile{
/**
*實現上傳的代碼s省略 可以看下我下面的2篇日志
http://blog.163.com/sun__haiming/blog/static/1283090682009918102455128/ 使用smarupload 實現上傳下載[有例子]
http://blog.163.com/sun__haiming/blog/static/128309068201011111948862/ 使用Struts2多文件上傳
*/
public void upload()
{
System.out.println("系統自動的上傳文件了");
}
}
2.創建定時器MyTaker並完成相應的功能
package com.sun.time2;
import Java.util.Calendar;
import Java.util.TimerTask;
import Javax.servlet.ServletContext;
public class MyTaker extends TimerTask {
private static boolean isRun = false;
private ServletContext context ;
private Calendar ca = Calendar.getInstance();
public MyTaker(ServletContext context)
{
this.context = context;
}
@Override
public void run() {
if(!isRun){
if(19==ca.get(Calendar.MINUTE)){
isRun = true;
context.log("正在執行所加載的任務");
UploadFile uf= new UploadFile();
uf.upload();
isRun =false;
context.log("任務順利完成");
}
}
else
{
System.out.println("任務還沒有執行完畢");
}
}
}
3.創建監聽器ContextListener
package com.sun.time2;
import Javax.servlet.ServletContextEvent;
import Javax.servlet.ServletContextListener;
import com.sun.time2.MyTaker;
import Java.util.*;
public class ContexListener implements ServletContextListener{
private Timer timer = null;
@Override
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
event.getServletContext().log("任務列表已經銷毀了");
}
@Override
public void contextInitialized(ServletContextEvent event) {
timer = new Timer(true);
event.getServletContext().log("服務器已經啟動了");
timer.schedule(new MyTaker(event.getServletContext()), 0 ,90);///每隔多長時間檢查掃描一次
event.getServletContext().log("已經加載了任務的列表");
}
}
4,最後一步就是在web.XML中配置監聽