spring boot / cloud (十) 使用quartz搭建调度中心
2017-06-20 08:50
746 查看
spring boot / cloud (十) 使用quartz搭建调度中心
##前言###quartz介绍:
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 2.3.0
##思路
将quartz集成进spring boot,并且提供一下内容:
配置
样例作业和触发器
##实现
###1.配置
引入maven依赖(这里的quartz使用的是2.2.3)
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>${quartz.version}</version> </dependency>
编写AutowiringSpringBeanJobFactory类
public final class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory implements ApplicationContextAware { /** * 描述 : beanFactory */ private 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; } }
编写SchedulerConfig类
@Configuration @ConfigurationProperties(prefix = "com.egridcloud.scheduler.config") @Validated public class SchedulerConfig { .......... }
编写SchedulerConfig类-属性
//是否记录日志 @NotNull private Boolean logFlag = true; //是否记录详细日志 @NotNull private Boolean logDetailFlag = false; /是否自动启动 @NotNull private Boolean autoStartup = true; //是否覆盖已经存在的jobs @NotNull private Boolean overwriteExistingJobs = true; //延迟启动秒数 @NotNull private Integer startupDelay = 0; /Job接受applicationContext的成员变量名 @NotNull private String applicationContextSchedulerContextKey = "applicationContext"; //quartz配置文件地址 @NotNull private String quartzPropertiesPath = "def_quartz.properties";
编写SchedulerConfig类-编写bean
@Bean public JobFactory jobFactory(ApplicationContext applicationContext) { AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory(); jobFactory.setApplicationContext(applicationContext); return jobFactory; } @Bean public Properties quartzProperties() throws IOException { PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean(); propertiesFactoryBean.setLocation(new ClassPathResource(getQuartzPropertiesPath())); propertiesFactoryBean.afterPropertiesSet(); return propertiesFactoryBean.getObject(); } @Bean("clusterQuartzScheduler") public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource, JobFactory jobFactory, Properties quartzProperties) throws IOException { //实例化 SchedulerFactoryBean factory = new SchedulerFactoryBean(); factory.setDataSource(dataSource); factory.setJobFactory(jobFactory); //属性设置 factory.setQuartzProperties(quartzProperties); factory.setOverwriteExistingJobs(getOverwriteExistingJobs()); factory.setAutoStartup(getAutoStartup()); factory.setStartupDelay(getStartupDelay()); factory.setApplicationContextSchedulerContextKey(getApplicationContextSchedulerContextKey()); //返回 return factory; }
编写def_quartz.properties配置文件
#Configure scheduler org.quartz.scheduler.instanceName=clusterQuartzScheduler 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 and Cluster org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.useProperties=true org.quartz.jobStore.tablePrefix=QRTZ_ org.quartz.jobStore.isClustered=true org.quartz.jobStore.clusterCheckinInterval=20000 org.quartz.jobStore.misfireThreshold=60000
执行数据库脚本,以及数据库配置(按需,我这里选择的是h2)
tables_h2.sql ######################################################## ###DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties) ######################################################## spring.datasource.url=jdbc:h2:file:D:/develop/d2_db/testdb
##结束
以上演示了quartz在spring boot中的配置,在下一章里会聊一下通过RMS来实现分布式调度的调度器的设计.
想获得最快更新,请关注公众号
相关文章推荐
- spring boot / cloud (七) 使用@Retryable来进行重处理
- (二)SpringBoot+SpringCloud —— 使用Eureka实现服务注册与发现
- SpringCloud SpringBoot mybatis 分布式微服务(七)Spring Boot中使用Spring Security进行安全控制
- SpringCloud SpringBoot mybatis 分布式微服务(十五)Spring Boot中使用MyBatis注解配置详解
- SpringCloud SpringBoot mybatis 分布式微服务(十一)Spring Boot多数据源配置与使用(Spring-data-jpa支持)
- JSP spring boot / cloud 使用filter防止XSS
- 使用spring boot admin监控spring cloud应用程序
- SpringCloud SpringBoot mybatis 分布式微服务(八)Spring Boot中使用JdbcTemplate访问数据库
- 使用SpringBoot+SpringCloud —— 引言
- springboot spring cloud 使用spring-session共享session
- spring boot / cloud (九) 使用rabbitmq消息中间件
- spring boot / cloud (十八) 使用docker快速搭建本地环境
- (八)SpringBoot+SpringCloud —— 使用Feign消费服务
- SpringCloud SpringBoot mybatis 分布式微服务(九)Spring Boot中使用Spring-data-jpa让数据访问更简单
- Spring MVC 使用Servlet原生API作为参数,在 spring boot 、 spring cloud 同样适用。
- spring boot / cloud (八) 使用RestTemplate来构建远程调用服务
- spring boot / cloud (九) 使用rabbitmq消息中间件
- 微服务学习三:springboot与springcloud集成之Eurake的使用(server端,client端)
- SpringCloud SpringBoot mybatis 分布式微服务(十二)Spring Boot中使用Redis数据库
- SpringCloud SpringBoot mybatis 分布式微服务(十)Spring Boot多数据源配置与使用(JdbcTemplate支持)