สำหรับ Java นั้นมี Library สำหรับจัดการ Schedule อยู่ชื่อว่า Quartz เอาไว้จัดการ Schedule ต่างๆ ใน Application ได้
แต่เนื่องด้วยถ้าใช้ Quartz อย่างเดียวมันคงไม่หล่อเท่าไร ดังนั้นเราจึงต้องเอามา Integrate กับ Spring ซะเพราะหลายคนส่วนใหญ่ก็ใช้งาน Spring กันอยู่แล้ว
ก่อนอื่นเรามาดู dependency กันก่อนครับว่าจะใช้ Quartz กับ Spring นั้นต้องใช้อะไรบ้าง
pom.xml
<dependencies> <dependency> <groupid>opensymphony</groupid> <artifactid>quartz</artifactid> <version>1.6.3</version> </dependency> <dependency> <groupid>commons-collections</groupid> <artifactid>commons-collections</artifactid> <version>3.2.1</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring</artifactid> <version>3.0.5.RELEASE</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-web</artifactid> <version>3.0.5.RELEASE</version> </dependency> </dependencies>จากนั้นให้สร้างไฟล์ที่เราต้องการจะรันเป็น Schedule
HelloQuartz.java
public class HelloQuartz { public void hello() { System.out.println("hello quartz"); } }เมื่อมีองค์ประกอบครบแล้ว เราก็มา config applicationContext.xml กัน applicationContext.xml
<bean id="helloQuartz" class="com.example.scheduler.HelloQuartz" /> <bean id="helloJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="helloQuartz" /> <property name="targetMethod" value="hello" /> </bean> <bean id="helloJob" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="helloJobDetail" /> <property name="cronExpression" value="0/5 * * * * ?" /> </bean> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="helloJob" /> </list> </property> </bean>จาก code ด้านบน เรากำหนดให้ bean ที่ต้องการรันเป็น HelloQuartz และกำหนด method ที่จะรันให้เป็น hello แล้วสั่งรันทุกๆ 5 วินาที ซึ่งเราสามารถกำหนด expression ได้ตาม pattern ของ Cron ครับ
บน Linux เวลาต้องการที่จะรันโปรแกรม หรือ Script โดยตั้งเวลาให้รัน ทุกๆ เช้าหรือทุกๆ ชั่วโมงคงทำได้ไม่ยากเพราะบน Linux มี Cron
ตอบลบถูกต้องครับ กรณี env เป็น linux vm ใช้ cron จะสะดวกกว่า แต่ถ้าต้องการ deploy บน container หรือ env อื่นๆ quartz ผมว่าก็เป็นทางเลือกที่ดีครับ
ลบ