1.定义任务执行类:
例:
public class QuartzUtil {
private void runJob() {
System.out.println("任务执行内容");
}
}
2.引入 spring quartz 核心包:spring-context-support-*.*.*.RELEASE.jar;及 quartz 包:quartz-*.*.*.jar,quartz-jobs-*.*.*.jar(版本自己取舍);
现在一般都采用 maven 构建项目,提供一下 maven jar 地址:
spring quartz 核心包:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>*.*.*.RELEASE</version>
</dependency>
quartz:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>*.*.*</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>*.*.*</version>
</dependency>
3.配置 spring 集成 quartz 的 xml 内容:
<!-- 1.定义执行任务类 -->
<bean id="quartzJob" class="任务执行类路径" />
<!-- 2.定义任务器 -->
<bean id="jobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="任务执行类 bena ID" />
<property name="targetMethod" value="任务需要执行的方法" />
<!-- 是否支持并发 false 不支持 -->
<property name="concurrent" value="false" />
</bean>
定时任务触发器分两种:
1.SimpleTrigger :周期性触发器
<!-- 3.定义周期性定时触发器 -->
<bean id="simpleTrigger"
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<!-- 需要执行的任务 -->
<property name="jobDetail" ref="jobDetail" />
<!-- 延迟开始 -->
<property name="startDelay" value="1000" />
<!-- 执行间隔 -->
<property name="repeatInterval" value="3000" />
</bean>
2.CronTrigger:复杂触发器
<!-- 3.定义复杂触发器(触发时间点使用Cron表达式定义) -->
<bean id="cronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="jobDetail" />
<property name="cronExpression" value="0 0 1 * * ?" />
</bean>
<!-- 4.注册任务器和触发器到 schedule 中 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger" />
<!-- <ref bean="cronTrigger" /> -->
</list>
</property>
</bean>
5.启动项目。
注意事项:
1.让容器加载 quartz 内容。若为单独文件。需要在web.xml内添加
例:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml,/WEB-INF/quartz.xml</param-value>
</context-param>
2.
在<Beans>中不能够设置default-lazy-init="true",否则定时任务不触发,如果不明确指明default-lazy-init的值,默认是false。
在<Beans>中不能够设置default-autowire="byName"的属性,否则后台会报org.springframework.beans.factory.BeanCreationException错误,
这样就不能通过Bean名称自动注入,必须通过明确引用注入。
说明:
1)Cron表达式的格式:秒 分 时 日 月 周 年(可选)。
字段名 允许的值 允许的特殊字符
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日 1-31 , - * ? / L W C
月 1-12 or JAN-DEC , - * /
周几 1-7 or SUN-SAT , - * ? / L C #
年 (可选字段) empty, 1970-2099 , - * /
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
2)Cron表达式范例: