在這邊的範例是 [1-2] 有提到的其中一種作法,主要是利用 Spring 的 scheduled-tasks 搭配 cron expression 來控制執行時間。
首先先寫一個定時執行時要執行的類別,類別內包含某個任意名稱的方法。這個方法即是要執行的任務的內容。
package test.ExecutorTest; import java.util.Calendar; public class ExecutorTest { public void execute () { System.out.println("Run at " + Calendar.getInstance().getTimeInMillis()); } }
接著要在 Spring 的設定文件中加上 task 的 namespace。
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:task="http://www.springframework.org/schema/task" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"> ..... </beans>這個步驟主要是為了 XML 定義的問題,這樣 IDE 在下一步寫 task 需要的 XML 標籤時,才有辦法正確地驗證標籤格式。
主要在這個步驟真正加上的是下面這兩個屬性。
xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"
再來是同樣在 Spring 的設定文件上,加上關於任務的資訊,也就是完整的 XML 大約會長這樣:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:task="http://www.springframework.org/schema/task" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"> <bean id="task" class="test.ExecutorTest" /> <task:scheduled-tasks> <task:scheduled ref="task" method="execute" cron="0/25 * * * * *"/> </task:scheduled-tasks> </beans>其中 task:scheduled 的屬性中,ref 表示的是要執行的類別的 bean 名稱,method 表示要執行的方法,cron 則是執行時間的 cron expression。
然後這樣就結束了~!
以上面設定的 cron expression 來說,執行時間是每 25 秒執行一次,因此會是每分鐘的 0 秒、25 秒和 50 秒時各執行一次。
執行結果如下:
Run at 1398312170000 Run at 1398312180000 Run at 1398312205000 Run at 1398312230000 Run at 1398312240000 Run at 1398312265000 Run at 1398312290000 Run at 1398312300001 Run at 1398312325000 Run at 1398312350000 Run at 1398312360001
如果需要一些常見的 cron expression 的範例,可以參考 [3]。
參考資料:
1、4 ways to schedule tasks in Spring 3 : @Scheduled example
2、Spring定时任务的几种实现
3、Cron Expression Examples
沒有留言:
張貼留言