Resty开发白皮书-中文版

使用Quartz来执行定时任务(resty-quartz)

1. 在jobs.properties里配置启动执行的任务

基本quartz配置,在resources下创建quartz目录,并在quartz目录下新建quartz.properties和jobs.properties

#quartz.properties
#==================================================
# 配置实例名和id
#==================================================
org.quartz.scheduler.instanceName = defaultScheduler
org.quartz.scheduler.instanceId: default
org.quartz.scheduler.skipUpdateCheck: true

#==================================================
# 配置线程池
#==================================================
org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 5
org.quartz.threadPool.threadPriority: 5

#==================================================
# 配置JobStore
#==================================================
org.quartz.jobStore.misfireThreshold: 600000

#org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore
#org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
#org.quartz.jobStore.useProperties=false
#org.quartz.jobStore.dataSource=db.migration.default
#org.quartz.jobStore.tablePrefix=QRTZ_
#org.quartz.jobStore.isClustered=true

#==================================================
# 配置数据库
#==================================================
#org.quartz.dataSource.db.migration.default.connectionProvider.class = cn.dreampie.common.plugin.quartz.QuartzConnectionProvider
#jobs.properties
#daily 为job的名字
job.daily.class=com.shengmu.resource.DailyJob
#group非必须
job.daily.group=daily
#once和cron属性 如果都没有  那么只在启动项目的时候 执行一次
#job.daily.once=指定时间(执行一次)
#每天2点执行
job.daily.cron=0 0 2 * * ?(循环执行)
#是否启用该任务
job.daily.enable=true

2. 通过new的方式来创建临时任务

new QuartzOnceJob(group, name, onceTime, clazz).addParam("k", "v").start();
new QuartzCronJob(group, name, jobCron, clazz).addParam("k", "v").start();

3. 编写一个job执行类

public class DailyJob implements Job {
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        //获取传入的参数
        //Map data = jobExecutionContext.getJobDetail().getJobDataMap();
        //Object date = data.get("date");
        //执行你的操作
    }
}