實例講解java定時任務(wù)
今天為大家分享的一個經(jīng)驗就是java的定時任務(wù),就是說在一天的某個時間點執(zhí)行以下代碼。
public class TimerManager { //時間間隔 private static final long PERIOD_DAY = 24 * 60 * 60 * 1000; public TimerManager() { Calendar calendar = Calendar.getInstance(); /*** 定制每日2:00執(zhí)行方法 ***/ calendar.set(Calendar.HOUR_OF_DAY, 2); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); Date date=calendar.getTime(); //第一次執(zhí)行定時任務(wù)的時間 //如果第一次執(zhí)行定時任務(wù)的時間 小于 當前的時間 //此時要在 第一次執(zhí)行定時任務(wù)的時間 加一天,以便此任務(wù)在下個時間點執(zhí)行。如果不加一天,任務(wù)會立即執(zhí)行。 if (date.before(new Date())) { date = this.addDay(date, 1); } Timer timer = new Timer(); NFDFlightDataTimerTask task = new NFDFlightDataTimerTask(); //安排指定的任務(wù)在指定的時間開始進行重復(fù)的固定延遲執(zhí)行。 timer.schedule(task,date,PERIOD_DAY); } // 增加或減少天數(shù) public Date addDay(Date date, int num) { Calendar startDT = Calendar.getInstance(); startDT.setTime(date); startDT.add(Calendar.DAY_OF_MONTH, num); return startDT.getTime(); } }
在TimerManager 這個類里面,大家一定要注意時間點的問題。如果你設(shè)定在凌晨2點執(zhí)行任務(wù)。但你是在2點以后發(fā)布的程序或是重啟過服務(wù),那這樣的情況下,任務(wù)會立即執(zhí)行,而不是等到第二天的凌晨2點執(zhí)行。為了,避免這種情況發(fā)生,只能判斷一下,如果發(fā)布或重啟服務(wù)的時間晚于定時執(zhí)行任務(wù)的時間,就在此基礎(chǔ)上加一天。
public class NFDFlightDataTimerTask extends TimerTask { private static Logger log = Logger.getLogger(NFDFlightDataTimerTask.class); @Override public void run() { try { //在這里寫你要執(zhí)行的內(nèi)容 } catch (Exception e) { log.info("-------------解析信息發(fā)生異常--------------"); } } } public class NFDFlightDataTaskListener implements ServletContextListener { public void contextInitialized(ServletContextEvent event) { new TimerManager(); } public void contextDestroyed(ServletContextEvent event) { } }
然后要在web.xml里面配置監(jiān)聽器
<listener> <listener-class> com.listener.NFDFlightDataTaskListener </listener-class> </listener>
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助。
相關(guān)文章
Java實現(xiàn)刪除排序鏈表中的重復(fù)元素的方法
這篇文章主要介紹了Java實現(xiàn)刪除排序鏈表中的重復(fù)元素的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-02-02IntelliJ IDEA創(chuàng)建普通的Java 項目及創(chuàng)建 Java 文件并運行的教程
這篇文章主要介紹了IntelliJ IDEA創(chuàng)建普通的Java 項目及創(chuàng)建 Java 文件并運行的教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02java基于jedisLock—redis分布式鎖實現(xiàn)示例代碼
這篇文章主要介紹了jedisLock—redis分布式鎖實現(xiàn)示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11