Java Web - build tomcat task schedule

一般我們要建立工作排程,依執行的目的,可以利用window系統本身執行執行檔或資料庫

SQL Server執行SQL語法。以我現在想做的目的是在tomcat環境下執行SQL語法,不過由於

環境不是我在管的,因此要設定window系統來執行的話,還得一台一台設或教對方設,實

在有點麻煩;再者,若直接以SQL Server系統排程來執行SQL語法雖然也OK,但是這個系

統有很多單位各自都有架設,等於每個點的SQL Server本身都要設定。到後來,還是以更動

到自身的程式來完成此一目的,交付給對方時好比平常更新程式一樣簡單,也不用設定!

一、設定web.xml

請在web.xml內設定您要執行的servlet,它得在tomcat重新啟用時去執行,因此您可以如下

設定

  1. <servlet>
  2. <description>When tomcat start then timer schedule work.</description>
  3. <display-name>TimeServlet</display-name>
  4. <servlet-name>TimeServlet</servlet-name>
  5. <servlet-class>com.util.TimeServlet</servlet-class>
  6. <load-on-startup>1</load-on-startup>
  7. </servlet>
  8. ....
  9. <servlet-mapping>
  10. <servlet-name>TimeServlet</servlet-name>
  11. <url-pattern>/TimeServlet</url-pattern>
  12. </servlet-mapping>

在這一支設定檔內,請注意load-on-startup標籤,設了這個標籤之後,表示當tomcat一起用時

,就會去執行該servlet設定對應到的程式!

二、Servlet

這一支程式扮演的角色是,透過tomcat的執行,我會請他再去執行一支繼承Java timertask的

程式,如此一來就會處於等待的情況下去執行該支程式!

語法如下:

  1. private final Timer timer = new Timer();
  2. public void init(ServletConfig config) throws ServletException {
  3. super.init(config);
  4. //每天23:55:50
  5. Calendar c = Calendar.getInstance();
  6. c.set(Calendar.HOUR_OF_DAY, 23);
  7. c.set(Calendar.MINUTE, 55);
  8. c.set(Calendar.SECOND, 50);
  9. timer.schedule(new ExecSQL(), c.getTime(), 24*60*60*1000);
  10. logger.info("啟動清空某SQL table's排程");
  11. }

使用java.util.Timer與java.util.Calender來控管哪時要執行ExecSQL class!

PS. 24*60*60*1000表示為多久的區間(以毫秒表示之)

三、ExecSQL class

要透過timer來執行該支class,得先對該class做extends java.util.TimerTask,如下:
  1. public class ExecSQL extends TimerTask{
  2. ....
  3. public void run() {
  4. //實際要執行的動作
  5. }
  6. }

請將您要執行的動作包在run method內!

如此一來,簡單的tomcat排程就此達成,算是一層一層的設定下才可以完成地!

雖然比起設定SQL Server來執行語法來的繁瑣,但是起碼不用到對方的環境去做設定!

留言