微信公衆號:一個優秀的廢人
如有問題或建議,請後臺留言,我會盡力解決你的問題。
前言
很久不見,因爲忙着泡妞,斷更了一個月,實在是罪過。廢話不多說,最近在工作中遇到了使用 quartz 實現定時任務的需求。寫出來分享給大家,權當筆記。
Spring + quartz 實現定時任務
因爲在開發中遇到的是非 Maven 的老項目,所以先介紹這種方式。這種實現方式更多的是 xml 的配置。
1.首先在 lib 目錄下加入 quartz 這l兩個jar包
2.Scheduler(任務調度器)的配置
在 applicationContext.xml 加入 Scheduler 的配置
<bean id="MyScheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="MyTriggers"></ref>
</list>
</property>
<property name="autoStartup" value="true"></property>
</bean>
3.Trigger(觸發器)的配置,這裏設置了逢5分鐘的倍數執行一次
<bean id="MyTriggers"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="MyJobDetail"></property>
<property name="cronExpression">
<!--<value>0 */1 * * * ?</value>-->
<!--<value>0 */5 * * * ?</value>-->
<!-- 早上八點執行 -->
<!--<value>0 0 8 * * ?</value>-->
<!-- 逢5分鐘的倍數執行一次 -->
<value>0 */5 * * * ?</value>
</property>
</bean>
4.JobDetail(任務,即被調度的任務)的配置
<bean id="MyJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 執行的類 -->
<property name="targetObject" ref="MyJobService"></property>
<!-- 類中的方法 -->
<property name="targetMethod" value="doSomething"></property>
<property name="concurrent" value="false"/>
<!-- 是否允許任務併發執行。當值爲false時,表示必須等到前一個線程處理完畢後纔再啓一個新的線程 -->
</bean>
5.業務類的配置
<bean id="oltJobService" class="com.nasus.service.quartz.MyJobService">
<property name="MyDao" ref="MyDao" />
<!-- 注入屬性 -->
</bean>
6.業務實現
import java.util.Date;
public class MyJobService {
public void doSomething() {
System.out.println("date: " + new Date().getTime());
}
}
7.啓動項目就可以看到控制檯每隔五分鐘就打印一次當前時間
後語
以上就是我對 Spring + quartz 的使用理解,希望對你們有幫助。最後,對 Python 、Java 感興趣請長按二維碼關注一波,我會努力帶給你們價值,如果覺得本文對你哪怕有一丁點幫助,請幫忙點個贊。