Spring + quartz 实现定时任务
因为在开发中遇到的是非 Maven 的老项目,所以先介绍这种方式。这种实现方式更多的是 xml 的配置。
- 首先在 lib 目录下加入 quartz 这l两个jar包
- 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>
- 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>
- 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>
- 业务类的配置
<bean id="oltJobService" class="com.nasus.service.quartz.MyJobService"> <property name="MyDao" ref="MyDao" /> <!-- 注入属性 --> </bean>
- 业务实现
import java.util.Date; public class MyJobService { public void doSomething() { System.out.println("date: " + new Date().getTime()); } }
- 启动项目就可以看到控制台每隔五分钟就打印一次当前时间
后语
以上就是我对自学Java的几点建议,希望对你们有帮助。最后,对 Python 、Java 感兴趣请长按二维码关注一波,我会努力带给你们价值,如果觉得本文对你哪怕有一丁点帮助,请帮忙点个赞。