文档章节

spring boot / cloud (十) 使用quartz搭建调度中心

wangkang80
 wangkang80
发布于 2017/06/19 10:24
字数 555
阅读 2219
收藏 57

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来实现分布式调度的调度器的设计.


想获得最快更新,请关注公众号

想获得最快更新,请关注公众号

© 著作权归作者所有

共有 人打赏支持
wangkang80
粉丝 351
博文 22
码字总数 34117
作品 3
浦东
高级程序员
加载中

评论(3)

wangkang80
wangkang80

引用来自“hantsy”的评论

自从 Spring 集成了 JDK 的原生 Task实现 Job Schedule后,再也没用过quartz这种古董了
:thumbsup:
hantsy
hantsy
自从 Spring 集成了 JDK 的原生 Task实现 Job Schedule后,再也没用过quartz这种古董了
MGL_TECH
MGL_TECH
mark 定时
UDF 集成样例--udf-sample

UDF 基于spring boot / spring cloud 的基础项目,脚手架,主要用于学习和实践 按照spring boot的思想,将各个不同的功能按照starter的形式拆分开来,做到灵活组合 物理架构示意 CI & CD 示意 代...

wangkang80
2017/08/27
344
0
实战分布式任务调度框架Elastic Job课程

Elastic-Job是一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。 Elastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的...

尹吉欢
01/13
0
0
Spring Cloud配置中心

Spring Cloud配置中心(Config) Spring Cloud是现在流行的分布式服务框架,它提供了很多有用的组件。比如:配置中心、Eureka服务发现、 消息总线、熔断机制等。 配置中心在Spring Cloud的众...

Java同学会
06/21
0
0
网关 Spring-Cloud-Gateway 源码解析 —— 网关初始化

网关 Spring-Cloud-Gateway 源码解析 —— 网关初始化 Harries Blog™2017-12-135 阅读 SpringAppclasspathcatbeanAPIbuildbug 本文主要基于 Spring-Cloud-Gateway 2.0.X M4 摘要: 原创出处 ......

Harries Blog™
2017/12/13
0
0
手把手教学系列——疯狂Spring Cloud教学视频

大家好,我是《疯狂Spring Cloud微服务架构实战》一书的作者杨恩雄,该书的配套教学视频已经录制完成,目的是为了让更多的朋友能轻松地学习Spring Cloud。本书与配套视频,适合Spring Cloud的...

杨大仙的程序空间
2017/10/18
0
24

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java并发备忘

不安全的“先检查后执行”,代码形式如下: if(条件满足){ //这里容易出现线程安全问题//doSomething}else{//doOther} 读取-修改-写入 原子操作:使用CAS技术,即首先从V中读取...

Funcy1122
今天
0
0
SpringBoot2.0 停机

最近新建了个SpringBoot2.0的项目,因为原来一直使用的是传统的Tomcat部署war包的形式,所以这次SpringBoot内置Tomcat部署jar包的时候遇到了很多问题。其中一个就是因为没有外置的Tomcat容器...

Canaan_
昨天
0
1
Confluence 6 外部参考

一个外部参考的意思是任何站点链接到你 Confluence 的实例。任何时候当 Confluence 的用户单击这个外部链接的时候,Confluence 可以记录这次单击为参考。 在默认的情况下,外部链接的参考链接...

honeymose
昨天
0
0
Android中的设计模式之抽象工厂模式

参考 《设计模式解析》 第十一章 Abstract Factory模式 《设计模式:可复用面向对象软件的基础 》3.1 Abstract Factory 抽象工厂 对象创建型模式 《Android源码设计模式解析与实战》第6章 创...

newtrek
昨天
0
0
Redis | 地理空间(GEO)的一个坑

Redis的地理空间(Geo)是个好东西,轻轻松松的就可以把地图描点的问题处理了, 最近却遇到一个坑...Redis采用的Msater-Slave模式, 运用GEORADIUS在salve读取对应的数据,新增了从节点但是从不返...

云迹
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部