Quartz 单独数据源

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

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);
}

}