專案部署後程序自動執行
阿新 • • 發佈:2019-01-11
在攜程程式中,我們經常會遇到要求能夠在專案部署上線後能夠定時執行,自動執行的要求。現在我就帶大家寫一個簡單的定時器,改定時器可以實現專案部署在tomcat後便可以自動執行,無需執行其他任何操作。首先我們來了解一下編寫的思路。
1、根據要求是要在tomcat啟動的時候就執行,所以我們必須在web.xml中加入一個監聽類。tomcat一啟動監聽類便自動執行。
如何實現這一監聽類?我們需要實現ServletContextListener類來監聽tomcat的啟動,終止。這樣就能實現監聽類在tomcat啟動的時候實現自動執行下面直接上程式碼。
package com.hongyu.utils; import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class AutoRunTimerListener implements ServletContextListener { //當servlet容器終止web應用是會自動呼叫該方法。在呼叫改方法時會自動銷戶全部的servlet和filter @Override public void contextDestroyed(ServletContextEvent arg0) { System.out.println("定時傳送Xml資訊監聽--已關閉!"); } //當servlet容器啟動web應用是呼叫改方法,呼叫胡容器在初始化filter,並對需要被初始化的servlet和filter急性型初始化 @Override public void contextInitialized(ServletContextEvent sce) { // 指定的任務,從指定的延遲後,開始進行重複執行。 Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); int day = calendar.get(Calendar.DAY_OF_MONTH); /** * 定製每天的10:00:00執行, * 若程式已超過10點啟動,當天不再執行, * 等到明日10點再執行 * * 這樣保證了時間一直是10點, * 而不會變成程式啟動時間 */ calendar.set(year, month, day, 10, 00, 00); Date defaultdate =calendar.getTime();// 今天10點(預設傳送時間) Date sendDate =new Date(); // 10點後開機 //判斷當前的時間是否大於10點,如果是則當天不再執行,如果不是則執行該程式 if (defaultdate.before(new Date())) { // 將傳送時間設為明天10點 calendar.add(Calendar.DATE, 1); sendDate = (Date) calendar.getTime(); } /** * 使用java中自帶的定時類。run方法中便是要定時執行的程式碼或者方法 * sTime.schedule(task, delay, period); * task代表要執行的任務,delay表示要延遲執行的時間,period表示要定時執行的頻率。 */ Timer sTime=new Timer(); sTime.schedule(new TimerTask() { @Override public void run() { //需要定時執行的程式碼寫在此處 System.out.println(new Date()+"我正在執行"); } }, sendDate, 1000*60); } }
編寫監聽類後,我們需要在web.xml中進行配置
<listener>
<listener-class>com.hongyu.utils.AutoRunTimerListener</listener-class>
</listener>
執行的結果
以上的的簡單的定時器實現了在判斷一天的時間是否在10點鐘之前,是則開始執行程式,不是則明日開始執行該程式。