java Web專案中的定時器實現
阿新 • • 發佈:2019-01-03
在Java的6.0版本中新增了concurrent包,這個包是用作執行緒同步的包,提供了很多工具類。
其中定時器就是其中之一。近期在做一個專案,在專案中要實現啟動Web服務的同時啟動一個任務,要求此任務為守護程序,定時呼叫一些任務操作程式碼。在網上搜索相關的實現,綜合考慮得出一個解決方案。方案是:使用tomcat伺服器的監聽器類作守護程序,呼叫concurrent包提供的定時器,最後在定時器中呼叫操作實現程式碼。具體實現類Translator在這裡不再給出,將其替換為自己需要的實現類即可。
監聽器類:
在Java Web專案的web.xml檔案中加入以下幾行,注意包路徑,向tomcat伺服器宣告監聽器。
其中定時器就是其中之一。近期在做一個專案,在專案中要實現啟動Web服務的同時啟動一個任務,要求此任務為守護程序,定時呼叫一些任務操作程式碼。在網上搜索相關的實現,綜合考慮得出一個解決方案。方案是:使用tomcat伺服器的監聽器類作守護程序,呼叫concurrent包提供的定時器,最後在定時器中呼叫操作實現程式碼。具體實現類Translator在這裡不再給出,將其替換為自己需要的實現類即可。
定時器類:
import java.util.Date; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import com.translate.Translator; /** * 定時器類 * @author ahomeeye */ public class TranslateTimer { private final ScheduledExecutorService scheduler = Executors .newScheduledThreadPool(1); Translator tranChinese = new Translator(); //操作實現類,我這裡為翻譯類 public void executeTranslateTimer() { Runnable task = new Runnable() { public void run() { // 翻譯 tranChinese.translateGo(); //呼叫操作實現方法 System.out.println("--------------翻譯:" + new Date().getTime() + "------------------"); } }; if (scheduler.isShutdown()) { scheduler = Executors.newScheduledThreadPool(1); scheduler.scheduleAtFixedRate(task, 10, 30, TimeUnit.SECONDS); } else { scheduler.scheduleAtFixedRate(task, 10, 30, TimeUnit.SECONDS); // 延遲10秒,每隔30秒翻譯一次 } } //停止任務,不再提交新任務,已提交任務會繼續執行以致完成 public void stop() { scheduler.shutdown(); } }
監聽器類:
import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import com.send.timer.SendDataTimer; import com.send.timer.TransferDataTimer; import com.send.timer.TranslateTimer; public class StartTimerListener implements ServletContextListener { TranslateTimer tranTimer = null; /** * 建立一個初始化監聽器物件,一般由容器呼叫 */ public StartTimerListener() { super(); } /** * 讓Web程式執行的時候自動載入Timer */ public void contextInitialized(ServletContextEvent e) { System.out.println("-------------StartTimerListener.init-------------"); tranTimer = new TranslateTimer(); // 啟動翻譯資料定時器 tranTimer.executeTranslateTimer(); } /** * 該方法由容器呼叫 空實現 */ public void contextDestroyed(ServletContextEvent e) { } }
在Java Web專案的web.xml檔案中加入以下幾行,注意包路徑,向tomcat伺服器宣告監聽器。
<listener>
<listener-class>com.servlet.StartTimerListener</listener-class>
</listener>