Hướng dẫn config Seasar chronos để chạy crontask cho seasar2
Hướng dẫn config Seasar chronos để chạy crontask cho seasar2 S2chronos Configuration Guide: run crontask ( schedule ) for Seasar2 1. Khái niệm CronTask CronTask thông thường là các task chạy ngầm riêng biệt với luồng chính của 1 chương trình nhằm mục đích thực hiện 1 công việc nào đó dựa ...
Hướng dẫn config Seasar chronos để chạy crontask cho seasar2 S2chronos Configuration Guide: run crontask ( schedule ) for Seasar2
1. Khái niệm CronTask
- CronTask thông thường là các task chạy ngầm riêng biệt với luồng chính của 1 chương trình nhằm mục đích thực hiện 1 công việc nào đó dựa trên 1 thời gian cụ thể và có thể lặp lại.
Bài viết này mình sẽ hướng dẫn chi tiết về cách cấu hình S2chronos để chạy các crontask cho các dự án sử dụng seasar. Ưu điểm của nó là vẫn có thể sử dụng các bean của seasar trong seasar context như bình thường. Ví dụ như sử dụng annotation @Binding để bơm các Dao hoặc các class logic để sử dụng
2.1 Thiết lập thư viện trong pom.xml của project
Config dependency in pom.xml file
<dependency> <groupId>org.seasar.chronos</groupId> <artifactId>s2chronos-extension</artifactId> <version>1.0.0</version> </dependency>
2.2 Thiết lập servlet của chronos nhằm mục đích quét những file sử dụng chronos, tương đương với enable chronos trong web.xml
Config filter for find chronos configuration in web.xml
<servlet> <servlet-name>chronosServlet</servlet-name> <servlet-class>org.seasar.chronos.extension.servlet.S2ChronosServlet</servlet-class> <load-on-startup>3</load-on-startup> </servlet>
2.3 Tạo file chronosCustomize.dicon để cấu hình các thuộc tính của chronos
create file chronosCustomize.dicon
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components> <component name="schedulerConfiguration" class="org.seasar.chronos.core.SchedulerConfiguration"> <property name="daemon">true</property> <property name="autoFinish">true</property> <property name="autoFinishTimeLimit">5000L</property> <property name="taskScanIntervalTime">2000L</property> <property name="threadPoolType">@org.seasar.chronos.core.ThreadPoolType@CACHED</property> </component> </components>
Đặt file này cùng thư mục với file app.dicon
2.4 Tạo component các quản lý và thực thi chạy crontask của chronos trong creator.dicon file
create chronos components in creator.dicon file
<component class="org.seasar.chronos.core.creator.TaskCreator"/> <component class="org.seasar.chronos.core.creator.TriggerCreator"/>
2.5 Tạo các customize cho chronos, bạn có thể hiểu các customizer này là các interceptor cho TaskCreator và TriggerCreator ở trên
create customize of chronos by config it in customizer.dicon file
<component name="taskSupportAspectCustomizer" class="org.seasar.framework.container.customizer.AspectCustomizer"> <initMethod name="addInterceptorName"> <arg>"aop.traceInterceptor"</arg> </initMethod> <property name="pointcut">"do.*, initialize, destroy"</property> </component> <component name="taskCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain"> <initMethod name="addCustomizer"> <arg>taskSupportAspectCustomizer</arg> </initMethod> </component> <component name="triggerSupportAspectCustomizer" class="org.seasar.framework.container.customizer.AspectCustomizer"> <initMethod name="addInterceptorName"> <arg>"aop.traceInterceptor"</arg> </initMethod> <property name="pointcut">".*"</property> </component> <component name="triggerCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain"> <initMethod name="addCustomizer"> <arg>triggerSupportAspectCustomizer</arg> </initMethod> </component>
2.6 Khai báo file core config của chronos trong app.dicon
Add core configuration file of chronos in app.dicon
<include path="chronos-extension.dicon"/>
2.7 Tao crontask file của bạn để chạy cho 1 nhiệm vụ nào đó
Create crontask file for run something. **Chú ý là file task phải nằm trong package "task" , package này nằm bên dưới 1 trong các root package của Seasar được config trong file "convention.dicon". ** Ví dụ config package name như sau:
<component class="org.seasar.framework.convention.impl.NamingConventionImpl"> <initMethod name="addRootPackageName"> <arg>"com.mycompany.demo"</arg> </initMethod> </component>
Thì crontask file phải nằm trong "package com.mycompany.demo.task". Dưới đây là ví dụ tạo ra 1 crontask chạy vào 9 giờ sáng hàng ngày
@Task @CronTrigger(expression = "0 0 9 * * ?") public class EmailRemindTimesheetTask { public void doExecute() { // do something } }
chronos hỗ trợ vài kiểu trigger như NonDelayTrigger, DelayTrigger, CronTrigger, TimedTrigger .CronTrigger được sử dụng phổ biến nhất
Về ý nghĩa và cách thiết lập giá trị cho các số của expression của CronTrigger thì tương tự như CronTrigger về crostask khác như Quartz http://www.quartz-scheduler.org/documentation/quartz-1.x/tutorials/crontrigger
Now you can test your crontask. Happy coding!
Reference links: http://s2chronos.sandbox.seasar.org/ja/install.html