首先介绍maven依赖
quartz依赖如下
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.2</version>
</dependency>
对应的Spring的版本是
<spring-version>4.2.3.RELEASE</spring-version>
applicationContext-job.xml对应的配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--自动注入工厂-->
<bean id="jobFactory" class="com.payment.scheduled.JobFactory"/>
<!-- 总配置 -->
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="jobFactory" ref="jobFactory"></property>
<!-- 加载 quartz.properties-->
<property name="configLocation" value="classpath:config/tes/quartz.properties"/>
</bean>
<!--第一次加载时启动-->
<bean id="jobService" class="com.payment.scheduled.task.JobService" init-method="loadJob"/>
</beans>
配置做啥用的这里再简单描述一下
jobFactory是提供对应定时任务代码的自动注入用的,不然定时任务代码注解是会报null值异常的。
jobService是系统启动时,默认运行一次的定时任务,这是为了从数据库中取出,需要运行的定时任务。
现在是最重要的类,代码如下
package com.payment.scheduled;
import org.quartz.*;
import org.quartz.impl.triggers.CronTriggerImpl;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* Created by hogan on 2018/9/14.
*/
@Component
public class DynamicJobFactory {
@Resource
private Scheduler scheduler;
/**
* 添加job
*
* @param className
* @param cronExpression
* @throws Exception
*/
public void addJob(String className, String cronExpression) throws Exception {
Class clazz = Class.forName(className);
JobDetail jobDetail = JobBuilder.newJob(clazz)
.withIdentity("jobName:" + className, Scheduler.DEFAULT_GROUP)
//如果需要给任务传递参数,可以用setJobData来设置参数
.setJobData(new JobDataMap())