使用quartz前需要弄清楚的流程:
创建自己的任务类Task
把task注入到quartz的jobDetail中
把jobDetail注入到quartz的触发器trigger中,,一个trigger只能触发一个jobDetail
把所有的trigger注入到quartz的调度器schedule中,,schedule会根据trigger中配置的时间来统一调度
以SSM框架为例:
1、导入包:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
2、配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd">
<!-- 系统定时任务工厂类 -->
<bean id="systemDescsionScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!--把下面两个触发器注入到调度器中-->
<property name="triggers">
<list>
<ref bean="trigger1"/>
<ref bean="trigger2"/>
</list>
</property>
<!--设置线程池的大小为4,,任务少的话,一般不设置-->
<property name="quartzProperties">
<props>
<prop key="org.quartz.threadPool.threadCount">4</prop>
</props>
</property>
</bean>
<!-- 定义触发器1 -->
<bean id="trigger1" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<bean class="org.springframework.scheduling.quartz.JobDetailBean">
<!--value是自己写的任务类-->
<property name="jobClass" value="com.itcast.service.task.Task1" />
<property name="jobDataAsMap">
<map>
<!--entry是任务中通过spring注入的其他bean,我这里是service-->
<entry key="userService" value-ref="userService"/>
<entry key="loginService" value-ref="loginService"/>
</map>
</property>
</bean>
</property>
<!--触发时间-->
<property name="cronExpression" value="0 30 00 * * ?"/>
</bean>
<!-- 定义触发器2 -->
<bean id="trigger2" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<bean class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.itcast.service.task.Task2"/>
</bean>
</property>
<!--触发时间-->
<property name="cronExpression" value="0 0 0 * * ?"/> </bean></beans>
3、任务类:
public class Task1 implements Job{
@Autowired
private UserService userService;
@Autowired
private LoginService loginService;
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
//写自己的业务逻辑
}catch(Exception e){
}
}
}
public class Task2 implements Job{
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
//写自己的业务逻辑
}catch(Exception e){
}
}
}