в новой версииSpringBoot2.0После выпуска мне не терпелось попробовать первых пользователей и заменить связанные проекты последней версией.SpringBootисходный кодGitHubСмотрите журнал изменений дляQuartzсделана новая версияAutoConfigurationАвтоматическая настройка избавляет от утомительной настройки.
Журнал обновлений официального сайта
Auto-configuration support is now include for the Quartz Scheduler, Мы также добавили новый
spring-boot-starter-quartzstarter POM. You can use in-memoryJobStores, or a full JDBC-based store. AllJobDetail,CalendarandTriggerbeans from your Spring application context will be automatically registered with theScheduler. 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Требуемые таблицы данных инициализируются конфигурацией.
контрольная работа
- Project Project
- Открытый доступ в браузере
http://localhost:8083/good/save?name=abcd&unit=斤&price=12.5Добавить запланированные задачи - Просмотр вывода консоли
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, Спасибо за чтение!