Quartz 单独数据源

仅记录
这个一开始也是搞了好久,最后还是看源码,改的才可以成功。

v1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
### jdbc
spring.datasource.type = com.zaxxer.hikari.HikariDataSource
spring.datasource.driver-class-name = org.postgresql.Driver
spring.datasource.url = jdbc:postgresql://tencent:5432/hawkeye?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
spring.datasource.username = postgres
spring.datasource.password = xxx

spring.datasource.dynamic.primary = hawkeye
spring.datasource.dynamic.strict = false
# hawkeye
spring.datasource.dynamic.datasource.hawkeye.url = jdbc:postgresql://tencent:5432/hawkeye?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
spring.datasource.dynamic.datasource.hawkeye.username = postgres
spring.datasource.dynamic.datasource.hawkeye.password = xxx
spring.datasource.dynamic.datasource.hawkeye.driver-class-name = org.postgresql.Driver
# quartz
spring.datasource.dynamic.datasource.quartz.url = jdbc:postgresql://tencent:5432/quartz?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
spring.datasource.dynamic.datasource.quartz.username = postgres
spring.datasource.dynamic.datasource.quartz.password = xxx
spring.datasource.dynamic.datasource.quartz.driver-class-name = org.postgresql.Driver

### eureka-client
# eureka地址
eureka.client.service-url.defaultZone = http://10.11.12.234:8761/eureka/
# 实例注册到 eureka
eureka.client.register-with-eureka = true
# 拉取实例列表信息
eureka.client.fetch-registry = true

### eureka-instance
# 访问路径可以显示ip
eureka.instance.prefer-ip-address = true
# 租客1秒交一次房租
#eureka.instance.lease-renewal-interval-in-seconds = 1
# 租客超过两秒不交房租就滚蛋
#eureka.instance.lease-expiration-duration-in-seconds = 2

### quartz
# quartz true=自动启动 false=手动启动
spring.quartz.auto-startup = true
# 0=立即启动。5=延迟 5秒后启动
spring.quartz.startup-delay = 0
# 相同 scheduler-name 的节点,形成一个 Quartz 集群
# 下面两种配置选择一个即可,一个是 spring 提供(优先级高),一个是 quartz 提供。
spring.quartz.scheduler-name = hawkeye_scheduler
#spring.quartz.properties.org.quartz.scheduler.instanceName=hawkeye_scheduler
# 配置 instanceId,可手动配置,也可使用生成策略(HOSTNAME + CURRENT_TIME),自动生成实例名称(instanceId)。
# 指定实例名称 ===> 对应表 qrtz_scheduler_state
#spring.quartz.properties.org.quartz.scheduler.instanceId=local_hawkeye_scheduler
spring.quartz.properties.org.quartz.scheduler.instanceId = AUTO
spring.quartz.properties.org.quartz.scheduler.instanceIdGenerator.class = org.quartz.simpl.SimpleInstanceIdGenerator
# 应用关闭时,是否等待定时任务执行完成。默认为 false ,建议设置为 true。
spring.quartz.wait-for-jobs-to-complete-on-shutdown = true
# quartz 数据源配置(此配置非官方,仅为自定义。具体使用参考:QuartzConfig.schedulerFactoryBeanCustomizer)
spring.quartz.properties.quartzDataSourceName = quartz
# 默认 memory
# 持久化 jdbc 注意:要注入 @QuartzDataSource 标注的 DataSource才可以生效
spring.quartz.job-store-type = jdbc
# MySQL org.quartz.impl.jdbcjobstore.StdJDBCDelegate
# PostgreSQL org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
# 是否自动使用 SQL 初始化 Quartz 表结构。
# 手动创建表结构 NEVER
# 删除表,重新创建 ALWAYS
spring.quartz.jdbc.initialize-schema = ALWAYS
# quartz 表前缀
spring.quartz.properties.org.quartz.jobStore.tablePrefix = QRTZ_
# quartz 集群模式配置
spring.quartz.properties.org.quartz.jobStore.isClustered = true
spring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval = 1000
# quartz 线程池相关配置
# 线程池大小。默认 10
# 线程优先级
# 线程池类型
spring.quartz.properties.org.quartz.threadPool.threadCount = 10
spring.quartz.properties.org.quartz.threadPool.threadPriority = 5
spring.quartz.properties.org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool

### datart
datart.userLoginParam.username = amoros
datart.userLoginParam.password = 123456
datart.orgId = 144f08e20bdc4dc093121cde066ffb5b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package com.amoros.hawkeye.config;

import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.quartz.QuartzDataSourceScriptDatabaseInitializer;
import org.springframework.boot.autoconfigure.quartz.QuartzProperties;
import org.springframework.boot.autoconfigure.quartz.SchedulerFactoryBeanCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

/**
* Quartz 配置
*
* @author 陶攀峰
* @date 2022-04-27 05:14
*/
@Configuration
public class QuartzConfig {

/**
* 用于从 mybatis.plus 动态数据源容器 中获取 quartz 所使用的数据源
*/
@Value("${spring.quartz.properties.quartzDataSourceName}")
private String quartzDataSourceName;

/**
* quartz 持久化:配置 DataSource
* 【SchedulerFactoryBean:用于创建 Scheduler】
*
* @param dynamicRoutingDataSource mybatis.plus 动态数据源
* @return SchedulerFactoryBeanCustomizer => 作用参考类文档,用在 QuartzAutoConfiguration.quartzScheduler方法
*/
@Bean
public SchedulerFactoryBeanCustomizer schedulerFactoryBeanCustomizer(DynamicRoutingDataSource dynamicRoutingDataSource) {

DataSource quartzDataSource = dynamicRoutingDataSource.getDataSource(quartzDataSourceName);

return schedulerFactoryBean -> schedulerFactoryBean.setDataSource(quartzDataSource);
}

/**
* quartz 持久化:配置 DataSource
* 【QuartzDataSourceScriptDatabaseInitializer:数据库初始化】
*
* @param dynamicRoutingDataSource mybatis.plus 动态数据源
* @param quartzProperties mybatis.plus 动态数据源
* @return SchedulerFactoryBeanCustomizer => 作用参考类文档,用在 QuartzAutoConfiguration.quartzScheduler方法
*/
@Bean
public QuartzDataSourceScriptDatabaseInitializer quartzDataSourceScriptDatabaseInitializer(DynamicRoutingDataSource dynamicRoutingDataSource, QuartzProperties quartzProperties) {

DataSource quartzDataSource = dynamicRoutingDataSource.getDataSource(quartzDataSourceName);

return new QuartzDataSourceScriptDatabaseInitializer(quartzDataSource, quartzProperties);
}

}

v2

2024-05-08 14:05:25 同步一下现有的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
### jdbc
spring.datasource.type = com.zaxxer.hikari.HikariDataSource
spring.datasource.driver-class-name = org.postgresql.Driver
spring.datasource.url = jdbc:postgresql://10.11.12.232:5432/hawkeye?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
spring.datasource.username = postgres
spring.datasource.password = postgres
# hikari 优化
spring.datasource.hikari.minimum-idle = 5
spring.datasource.hikari.maximum-pool-size = 15
spring.datasource.hikari.auto-commit = true
spring.datasource.hikari.idle-timeout = 30000
spring.datasource.hikari.pool-name = hikari
spring.datasource.hikari.max-lifetime = 900000
spring.datasource.hikari.connection-timeout = 15000
spring.datasource.hikari.connection-test-query = select 1



### quartz
# ==== 配置参考类 org.quartz.impl.StdSchedulerFactory
# ==== 配置参考官方文档 http://www.quartz-scheduler.org/documentation/quartz-2.3.0/configuration/
# ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
# quartz true=自动启动 false=手动启动(参考 com.amoros.hawkeye.job.ScheduleUtils.init)
spring.quartz.auto-startup = false
# 0=立即启动。5=延迟 5秒后启动
spring.quartz.startup-delay = 0
# 相同 scheduler-name 的节点,形成一个 Quartz 集群
# 下面两种配置选择一个即可,一个是 spring 提供(优先级高),一个是 quartz 提供。
spring.quartz.scheduler-name = hawkeye_scheduler
#spring.quartz.properties.org.quartz.scheduler.instanceName=hawkeye_scheduler
# 配置 instanceId,可手动配置,也可使用生成策略(HOSTNAME + CURRENT_TIME),自动生成实例名称(instanceId)。
# 指定实例名称 ===> 对应表 qrtz_scheduler_state
#spring.quartz.properties.org.quartz.scheduler.instanceId=local_hawkeye_scheduler
spring.quartz.properties.org.quartz.scheduler.instanceId = AUTO
spring.quartz.properties.org.quartz.scheduler.instanceIdGenerator.class = org.quartz.simpl.SimpleInstanceIdGenerator
# 应用关闭时,是否等待定时任务执行完成。默认为 false ,建议设置为 true。
spring.quartz.wait-for-jobs-to-complete-on-shutdown = true
# 默认 memory
# 持久化 jdbc 注意:要注入 @QuartzDataSource 标注的 DataSource才可以生效
spring.quartz.job-store-type = jdbc
# 默认 JobStoreCMT 无事务(不会提交/回滚) JobStoreTX 事务(会提交/回滚)
spring.quartz.properties.org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
# MySQL org.quartz.impl.jdbcjobstore.StdJDBCDelegate
# PostgreSQL org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
# 是否自动使用 SQL 初始化 Quartz 表结构。
# 手动创建表结构 NEVER
# 删除表,重新创建 ALWAYS
# MySQL => tables_mysql_innodb.sql
# PG => tables_postgres.sql
spring.quartz.jdbc.initialize-schema = NEVER
# quartz 表前缀
spring.quartz.properties.org.quartz.jobStore.tablePrefix = QRTZ_
# 失火阈值 默认60s
spring.quartz.properties.org.quartz.jobStore.misfireThreshold = 60000
# 是否集群 默认false
spring.quartz.properties.org.quartz.jobStore.isClustered = true
# 集群检查 默认15s
spring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval = 5000
# 最大失火处理 默认20
spring.quartz.properties.org.quartz.jobStore.maxMisfiresToHandleAtATime = 20
# 批量获取trigger最大计数 默认1 注意: >1 必须开启 acquireTriggersWithinLock=true
spring.quartz.properties.org.quartz.scheduler.batchTriggerAcquisitionMaxCount = 10
# 默认 false true=batchTriggerAcquisitionMaxCount is set > 1
spring.quartz.properties.org.quartz.jobStore.acquireTriggersWithinLock = true
# 数据源别名,自定义
spring.quartz.properties.org.quartz.jobStore.dataSource = qzDS
spring.quartz.properties.org.quartz.dataSource.qzDS.URL = ${spring.datasource.url}
spring.quartz.properties.org.quartz.dataSource.qzDS.user = ${spring.datasource.username}
spring.quartz.properties.org.quartz.dataSource.qzDS.password = ${spring.datasource.password}
spring.quartz.properties.org.quartz.dataSource.qzDS.driver = ${spring.datasource.driver-class-name}
# 使用 hikaricp 作为数据库连接池 <= org.quartz.utils.PoolingConnectionProvider.POOLING_PROVIDER_HIKARICP
spring.quartz.properties.org.quartz.dataSource.qzDS.provider = hikaricp
# 最大数据库连接数 默认10
spring.quartz.properties.org.quartz.dataSource.qzDS.maxConnections = 10
# 每次连接池返回时要执行的数据库 sql 查询,以确保它仍然有效。
spring.quartz.properties.org.quartz.dataSource.qzDS.validationQuery = select 1
# 线程池大小。默认 10
spring.quartz.properties.org.quartz.threadPool.threadCount = 10
# 线程优先级
spring.quartz.properties.org.quartz.threadPool.threadPriority = 5
# 线程池类型
spring.quartz.properties.org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool