java quartz 2.2.3_springboot集成quartz2.3.0

quartz是java里头定时任务的经典开源实现,这里讲述一下如何在springboot中集成quartz。

maven

org.springframework

spring-tx

org.springframework

spring-context-support

org.quartz-scheduler

quartz

${quartz.version}

org.quartz-scheduler

quartz-jobs

${quartz.version}

内存版配置

org.quartz.scheduler.instanceName=spring-boot-quartz-demo

org.quartz.scheduler.instanceId=AUTO

org.quartz.threadPool.threadCount=5

org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

quartz config

@Configuration

public class QuartzConfig {

public static final String QUARTZ_PROPERTIES_PATH = "/quartz.properties";

@Bean

public JobFactory jobFactory(ApplicationContext applicationContext) {

AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();

jobFactory.setApplicationContext(applicationContext);

return jobFactory;

}

@Bean

public SchedulerFactoryBean schedulerFactoryBean(JobFactory jobFactory) throws IOException {

SchedulerFactoryBean factory = new SchedulerFactoryBean();

factory.setAutoStartup(true);

factory.setJobFactory(jobFactory);

factory.setQuartzProperties(quartzProperties());

return factory;

}

@Bean

public Properties quartzProperties() throws IOException {

PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();

propertiesFactoryBean.setLocation(new ClassPathResource(QUARTZ_PROPERTIES_PATH));

propertiesFactoryBean.afterPropertiesSet();

return propertiesFactoryBean.getObject();

}

public static class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory implements

ApplicationContextAware {

private transient AutowireCapableBeanFactory beanFactory;

@Override

public void setApplicationContext(final ApplicationContext context) {

beanFactory = context.getAutowireCapableBeanFactory();

}

@Override

protected Object createJobInstance(final TriggerFiredBundle bundle) throws Exception {

final Object job = super.createJobInstance(bundle);

beanFactory.autowireBean(job);

return job;

}

}

}

demo job

@PersistJobDataAfterExecution

@DisallowConcurrentExecution

public class DemoJob implements Job{

private String jobArg;

@Autowired

DemoService demoService;

@Override

public void execute(JobExecutionContext context) throws JobExecutionException {

demoService.hello(jobArg);

}

public void setJobArg(String jobArg) {

this.jobArg = jobArg;

}

}

注册到quartz去调度

@Autowired

SchedulerFactoryBean schedulerFactoryBean;

public void scheduleJobs() throws SchedulerException {

Scheduler scheduler = schedulerFactoryBean.getScheduler();

JobDataMap jobDataMap = new JobDataMap();

jobDataMap.put("jobArg", "world");

JobDetail jobDetail = JobBuilder.newJob(DemoJob.class)

.setJobData(jobDataMap)

.withDescription("demo")

.withIdentity("demo-job", "demo-group")

.build();

Trigger trigger = TriggerBuilder.newTrigger()

.forJob(jobDetail)

.withSchedule(cronSchedule("0/5 * * * * ?"))

.build();

if(!scheduler.checkExists(JobKey.jobKey("demo-job","demo-group"))){

scheduler.scheduleJob(jobDetail,trigger);

}

scheduler.start();

}

使用postgres作为持久层版本

配置文件

#============================================================================

# Configure Main Scheduler Properties

#============================================================================

org.quartz.scheduler.instanceName=spring-boot-quartz-demo

org.quartz.scheduler.instanceId=AUTO

org.quartz.scheduler.skipUpdateCheck=true

#============================================================================

# Configure ThreadPool

#============================================================================

org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool

org.quartz.threadPool.threadCount=5

org.quartz.threadPool.threadPriority=5

#============================================================================

# Configure JobStore

#============================================================================

org.quartz.jobStore.misfireThreshold=60000

org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX

org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate

org.quartz.jobStore.useProperties=false

#org.quartz.jobStore.dataSource=dataSource

org.quartz.jobStore.tablePrefix=QRTZ_

org.quartz.jobStore.isClustered=true

设置数据源和数据管理器

@Bean

public SchedulerFactoryBean schedulerFactoryBean(JobFactory jobFactory, DataSource dataSource, PlatformTransactionManager transactionManager) throws IOException {

SchedulerFactoryBean factory = new SchedulerFactoryBean();

factory.setAutoStartup(true);

factory.setJobFactory(jobFactory);

factory.setQuartzProperties(quartzProperties());

//jdbc store

factory.setDataSource(dataSource);

factory.setTransactionManager(transactionManager);

return factory;

}

其他的配置不变

springboot项目正常配置datasource即可

sql的schema文件见安装包的docs/dbTables目录下

doc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值