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重新啟用時去執行,因此您可以如下

設定

<servlet>
  <description>When tomcat start then timer schedule work.</description>
  <display-name>TimeServlet</display-name>
  <servlet-name>TimeServlet</servlet-name>
  <servlet-class>com.util.TimeServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
....
<servlet-mapping>
  <servlet-name>TimeServlet</servlet-name>
  <url-pattern>/TimeServlet</url-pattern>
</servlet-mapping>

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

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

二、Servlet

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

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

語法如下:

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

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

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

三、ExecSQL class

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

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

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

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

留言