本文主要写一下关于spring+quartz的用法,对于quartz基本或原理不太了解的话最好去相关文章了解一下。
ps:个人觉得,quartz和spring+quartz原本的用法还是有着天差地别,所以了解下原理,也没必要把quartz基础的用法都搞懂,实际中一般不会直接使用quartz的。
使用spring+quartz,一般都是web项目中,大多都是为了引入service完成相关业务逻辑。
但网上相关导入service都存在在各种不完整和各种问题。现在我就来整理两种方式:
方式一:直接定时
使用:定时只能写死,不能更改。用于一些不会变量的任务情况
1.设置一个任务类 StockPushTask,在类中编写自己需要实现的方法test
2.配置文件
spring配置省略,spirng采用注解扫描方式。需要扫描mvc各层的包及此task任务类所在包
注意:要在此类中用@Component注解类和@Resource注解自己需要用到的service类 目的使此类交由spring管理,并为自己装配上所需要的service。
@Component
public class StockPushTask {
@Resource
private StockService stockService;
@Resource
private UserService userService;
private JPushUtil jPushUtil;
public void test() {
System.out.println("————清理开始执行————");
//清理电子券到期的
userService.updateVoucher();
//清理会员到期的
userService.delUsers();
System.out.println("————清理执行结束————");
}
}
spring-quartz.xml中的配置
<!-- 任务类 -->
<bean id="MyScheduler" class="com.stock.way.app.controller.StockPushTask"></bean>
<!-- 把任务类绑定给jobDetail对象 -->
<bean id="jobHand" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="MyScheduler"/><!-- 指定具体拦截哪个定时任务 -->
</property>
<property name="targetMethod">
<value>test</value><!-- 指定要执行的类里面的哪个方法 -->
</property>
</bean>
<!-- 计划触发器,使用 CronTriggerFactoryBean。这种类型更加灵活,允许你针对特定实例选择计划方案以及将来要执行的频率。 -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="jobHand" />
<property name="cronExpression" value="20 54 10 * * ?"