в новой версии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-memoryJobStores
, or a full JDBC-based store. AllJobDetail
,Calendar
andTrigger
beans 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, Спасибо за чтение!