Глава 47: Новые возможности Spring Boot 2.0 — автоматическая интеграция конфигурации Quartz

задняя часть база данных Spring исходный код

в новой версииSpringBoot2.0После выпуска мне не терпелось попробовать первых пользователей и заменить связанные проекты последней версией.SpringBootисходный кодGitHubСмотрите журнал изменений дляQuartzсделана новая версияAutoConfigurationАвтоматическая настройка избавляет от утомительной настройки.

Журнал обновлений официального сайта

Auto-configuration support is now include for the Quartz Scheduler, Мы также добавили новыйspring-boot-starter-quartz starter POM. You can use in-memory JobStores, or a full JDBC-based store. All JobDetailCalendar and Trigger beans from your Spring application context will be automatically registered with the Scheduler. For more details read the new "Quartz Scheduler" section of the reference documentation.

SpringBoot2.0версия интегрированнаяQuartz2.3.0Последняя версия официального сайта.

Цели этой главы

использоватьSpringBoot2.0Добавлены новые функцииQuartzАвтоматизированная конфигурация.

Тема изучения основных технологий SpringBoot корпоративного уровня


Тема Название темы Тематическое описание
001 Основная технология Spring Boot Объяснить некоторые основные компоненты SpringBoot на уровне предприятия.
002 Исходный код главы о технологии Spring Boot Каждая статья в кратком справочнике по основным технологиям Spring Boot соответствует исходному коду облака кода.
003 Технология Spring Cloud Core Всестороннее объяснение основных технологий Spring Cloud
004 Исходный код главы о технологии Spring Cloud Каждая статья краткого описания основных технологий Spring Cloud соответствует исходному коду.
005 Базовая технология QueryDSL Всесторонне объясните основную технологию QueryDSL и интегрируйте SpringDataJPA на основе SpringBoot.
006 Базовая технология SpringDataJPA Всестороннее объяснение основной технологии Spring Data JPA
007 Каталог изучения основных технологий SpringBoot Учебный каталог системы SpringBoot, обратите внимание и лайкните! ! !

Построить проект

в предыдущей главеГлава 40: Распределенное многоузловое сохранение нагрузки для запланированных задач на основе SpringBoot и QuartzМы завершили интеграцию, добавив конфигурацию.Для удобства этой главы мы можем напрямую скопировать предыдущий проект и изменить его на основе. Открытымpom.xmlфайл конфигурации,SpringBootПредоставляет нам соответствующие зависимости, мы будем использовать предыдущийquartzСоответствующие зависимости удаляются и заменяются наspring-boot-starter-quartz,Следующее:

<!--quartz相关依赖-->
<dependency>
	<groupId>org.quartz-scheduler</groupId>
	<artifactId>quartz</artifactId>
	<version>${quartz.version}</version>
</dependency>
<dependency>
	<groupId>org.quartz-scheduler</groupId>
	<artifactId>quartz-jobs</artifactId>
	<version>${quartz.version}</version>
</dependency>
>>>>替换为:>>>>
<!--quartz依赖-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
......

Удалить класс конфигурации QuartzConfiguration

В предыдущей главе мы использовалиQuartzConfigurationЧтобы завершить класс конфигурацииQuartzТребуется ряд конфигураций, таких как:JobFactory,SchedulerFactoryBeanподождите, после того, как мы добавимspring-boot-starter-quartzПосле зависимости нет необходимости активно объявлять фабричный класс, т.к.spring-boot-starter-quartzОн уже настроен для нас автоматически.

Исходный код автоматической настройки

мы нашлиIdeaизExternal Librariesи расширитьspring-boot-autoconfigure-2.0.0.RELEASE.jar,оказатьсяorg.springframework.boot.autoconfigure.quartz, каталогSpringBootпредоставил намQuartzРеализация исходного кода автоматической конфигурации, в этом каталоге есть несколько следующих классов:

  • AutowireCapableBeanJobFactoryЭтот класс заменяет наш предыдущий вQuartzConfigurationкласс конфигурацииAutowiringSpringBeanJobFactoryРеализация внутреннего класса, основная роль — наша кастомнаяQuartzJobBeanподклассыSpring IOCУправляемый, вы можете использовать внедрение в любой запланированный класс задачSpring IOCУправляемый класс.
  • JobStoreTypeЭтот класс является типом перечисления, который определяет соответствующийapplication.yml,application.propertiesвнутри файлаspring.quartz.job-store-typeконфигурация, целью которой является настройкаquartzСпособ хранения данных задачи: ПАМЯТЬ (метод памяти:默认), JDBC (режим базы данных).
  • QuartzAutoConfigurationЭтот класс является основным классом автоматической конфигурации, внутренне настраиваемымSchedulerFactoryBeanа такжеJdbcStoreTypeConfiguration,использоватьQuartzPropertiesКак условие конфигурации атрибута автоматизации.
  • QuartzDataSourceInitializerЭтот класс в основном используется для некоторых операций после инициализации источника данных, и разные сценарии базы данных выбираются в соответствии с базой данных разных типов платформ.
  • QuartzPropertiesЭтот класс соответствуетspring.quartzсуществуетapplication.yml,application.propertiesСоответствующая конфигурация в начале файла.
  • SchedulerFactoryBeanCustomizerЭто интерфейс, после того как мы реализуем интерфейс и класс реализации будет использоватьSpring IOCхостинг, можно сделатьSchedulerFactoryBeanНастройки персонализации, настройки здесь могут быть полностьюSchedulerFactoryBeanВнесите все изменения в настройки.

конфигурация spring.quartz

ВидетьQuartzAutoConfigurationИсходный код класса, мы знаем, если вы хотите использовать автоматическую настройку, вам необходимо выполнитьQuartzPropertiesИнициализация класса конфигурации атрибута, поэтому нам нужноapplication.yml,application.propertiesДобавить информацию о конфигурации, соответствующую файлу конфигурации следующим образом:

spring:
  quartz:
    #相关属性配置
    properties:
      org:
        quartz:
          scheduler:
            instanceName: clusteredScheduler
            instanceId: AUTO
          jobStore:
            class: org.quartz.impl.jdbcjobstore.JobStoreTX
            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
            tablePrefix: QRTZ_
            isClustered: true
            clusterCheckinInterval: 10000
            useProperties: false
          threadPool:
            class: org.quartz.simpl.SimpleThreadPool
            threadCount: 10
            threadPriority: 5
            threadsInheritContextClassLoaderOfInitializingThread: true
    #数据库方式
    job-store-type: jdbc
    #初始化表结构
    #jdbc:
      #initialize-schema: never
  • spring.quartz.propertiesЭта конфигурация фактически заменяет предыдущуюquartz.properties, мы ставим передquartz.propertiesВся конфигурация в конфигурационном файле преобразуется вYUMLстиль, соответствующий может быть добавлен в этой конфигурации, вQuartzAutoConfigurationВ классе он будет автоматически вызыватьсяSchedulerFactoryBeanизsetQuartzPropertiesСпособы принестиspring.quartz.propertiesВсе конфигурации внутри установлены.
@Bean
@ConditionalOnMissingBean
public SchedulerFactoryBean quartzScheduler() {
        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
        schedulerFactoryBean.setJobFactory(new AutowireCapableBeanJobFactory(this.applicationContext.getAutowireCapableBeanFactory()));
        // 如果配置了spring.quartz.properties
        if (!this.properties.getProperties().isEmpty()) {
        //  将所有properties设置到QuartzProperties
            schedulerFactoryBean.setQuartzProperties(this.asProperties(this.properties.getProperties()));
        }
......省略部分代码
  • spring.quartz.job-store-typeнастраиватьquartzМетод сохранения данных задачи, по умолчанию используется метод памяти, здесь мы используем предыдущий метод, настраиваемJDBCСохраняйте задачи таким образом, чтобы использовать базу данных.
  • spring.quartz.jdbc.initialize-schema

Текущая версия этой конфигурации не вступает в силу.Согласно официальной документации сайта, цель состоит в том, чтобы автоматическиquartzТребуемые таблицы данных инициализируются конфигурацией.

контрольная работа

  1. Project Project
  2. Открытый доступ в браузереhttp://localhost:8083/good/save?name=abcd&unit=斤&price=12.5Добавить запланированные задачи
  3. Просмотр вывода консоли
 22:55:18.812  INFO 17161 --- [           main] c.hengyu.chapter39.Chapter47Application  : 【【【【【【定时任务分布式节点 - quartz-cluster-node-second 已启动】】】】】】
2018-03-06 22:55:20.772  INFO 17161 --- [uartzScheduler]] o.s.s.quartz.SchedulerFactoryBean        : Starting Quartz Scheduler now, after delay of 2 seconds
2018-03-06 22:55:20.793  INFO 17161 --- [uartzScheduler]] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_yuqiyudeMacBook-Pro.local1520348117910 started.
2018-03-06 22:56:20.103  INFO 17161 --- [nio-8083-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'
2018-03-06 22:56:20.103  INFO 17161 --- [nio-8083-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2018-03-06 22:56:20.121  INFO 17161 --- [nio-8083-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 18 ms
Hibernate: select next_val as id_val from hibernate_sequence for update
Hibernate: update hibernate_sequence set next_val= ? where next_val=?
Hibernate: insert into basic_good_info (bgi_name, bgi_price, bgi_unit, bgi_id) values (?, ?, ?, ?)
2018-03-06 22:56:20.268 TRACE 17161 --- [nio-8083-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [VARCHAR] - [abcd]
2018-03-06 22:56:20.269 TRACE 17161 --- [nio-8083-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [2] as [NUMERIC] - [12.5]
2018-03-06 22:56:20.269 TRACE 17161 --- [nio-8083-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [3] as [VARCHAR] - [斤]
2018-03-06 22:56:20.269 TRACE 17161 --- [nio-8083-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [4] as [BIGINT] - [1]
2018-03-06 22:56:47.253  INFO 17161 --- [eduler_Worker-1] c.h.c.timers.GoodStockCheckTimer         : 分布式节点quartz-cluster-node-second,执行库存检查定时任务,执行时间:Tue Mar 06 22:56:47 CST 2018
2018-03-06 22:57:00.012  INFO 17161 --- [eduler_Worker-2] c.h.c.timers.GoodStockCheckTimer         : 分布式节点quartz-cluster-node-second,执行库存检查定时任务,执行时间:Tue Mar 06 22:57:00 CST 2018
2018-03-06 22:57:20.207  INFO 17161 --- [eduler_Worker-3] c.hengyu.chapter39.timers.GoodAddTimer   : 分布式节点quartz-cluster-node-second,商品添加完成后执行任务,任务时间:Tue Mar 06 22:57:20 CST 2018
2018-03-06 22:57:30.013  INFO 17161 --- [eduler_Worker-4] c.h.c.timers.GoodStockCheckTimer         : 分布式节点quartz-cluster-node-second,执行库存检查定时任务,执行时间:Tue Mar 06 22:57:30 CST 2018
2018-03-06 22:58:00.014  INFO 17161 --- [eduler_Worker-5] c.h.c.timers.GoodStockCheckTimer         : 分布式节点quartz-cluster-node-second,执行库存检查定时任务,执行时间:Tue Mar 06 22:58:00 CST 2018

По содержимому консоли видно, что наша временная задача начала нормально выполняться, конечно, если мы ее откроем多个节点Такого же можно добиться任务自动漂移Эффект.

Суммировать

Подводя итог, мы завершилиSpringBoot2.0интегрированныйQuartz, нам нужно только добавить зависимости, добавить конфигурацию и не нужно писать код.

Исходный код этой главы загружен в облако кода: SpringBoot, поддерживающий адрес исходного кода:git ee.com/sh-wave-with/spr…Адрес исходного кода поддержки SpringCloud:git ee.com/sh-wave-with/spr…Для Springboot связанные статьи, пожалуйста, посетите:Каталог: Каталог обучения SpringBootДля ознакомления со статьями, связанными с QueryDSL, посетите:Каталог обучения общей структуре запросов QueryDSLДля статей, связанных со SpringDataJPA, посетите:Каталог: Учебный каталог SpringDataJPA, Спасибо за чтение!

微信扫码关注 - 专注分享

欢迎加入知识星球,恒宇少年带你走以后的技术道路! ! !

Специальное предложение с ограниченным временем 66 юаней в год, присоединяйтесь к Hengyu Junior's Die-Hard Fan Pannet Planet, вот знания, которые вы хотите узнать, Hengyu Junior ответит сложно и сложные вопросы One-on One! ! !

知识星球