1.引入quartz2.2的maven依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.3</version>
</dependency>
2.在src/main/resources目录下新建quartz.properties文件
#==============================================================
#Configure Main Scheduler Properties
#==============================================================
org.quartz.scheduler.instanceName = quartzScheduler
org.quartz.scheduler.instanceId = AUTO
#==============================================================
#Configure JobStore
#==============================================================
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = true
org.quartz.jobStore.clusterCheckinInterval = 20000
#==============================================================
#Configure ThreadPool
#==============================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
3.去官网下载quartz-2.2.3-distribution.tar.gz,解压后找到quartz-2.2.3/docs/dbTables/tables_mysql.sql,在数据库中执行它
4.新建两个java类:JobDetailBean和DemoJob
package org.webbase.common.quartz;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import java.lang.reflect.Method;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.context.ApplicationContext;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class JobDetailBean extends QuartzJobBean {
private static final Logger logger = LogManager.getLogger(JobDetailBean.class.getName());
private String targetObject;
private String targetMethod;
private ApplicationContext ctx;
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
try {
Object bean = ctx.getBean(targetObject);
Method m = bean.getClass().getMethod(targetMethod);
m.invoke(bean, null);
} catch (Exception e) {
logger.error(e);
}
}
public void setApplicationContext(ApplicationContext applicationContext) {
this.ctx = applicationContext;
}
public void setTargetObject(String targetObject) {
this.targetObject = targetObject;
}
public void setTargetMethod(String targetMethod) {
this.targetMethod = targetMethod;
}
}
package org.webbase.demo.job;
import org.springframework.stereotype.Component;
@Component
public class DemoJob {
public void execute() {
System.out.println("demo job!");
}
}
5.在spring配置文件中增加quartz的bean配置
<bean id="demoJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="org.webbase.common.quartz.JobDetailBean" />
<property name="durability" value="true" />
<property name="description" value="测试job" />
<property name="jobDataAsMap">
<map>
<entry key="targetObject" value="demoJob" />
<entry key="targetMethod" value="execute" />
</map>
</property>
</bean>
<bean id="demoJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="demoJobDetail"/>
<property name="cronExpression" value="1/30 * * * * ?" />
</bean>
<!-- 以下是Quartz定时调度配制-->
<bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="configLocation" value="classpath:quartz.properties" />
<property name="dataSource" ref="dataSource" />
<property name="applicationContextSchedulerContextKey" value="applicationContext" />
<!--可选,QuartzScheduler 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 -->
<property name="overwriteExistingJobs" value="true" />
<!-- 设置自动启动 -->
<property name="autoStartup" value="true" />
<property name="startupDelay" value="5"/>
<property name="triggers">
<list>
<ref bean="demoJobTrigger"/>
</list>
</property>
</bean>
配置完毕