背景:
开发项目中,使用到quartz,想把计时器的数据源和主程序的数据源分离,刚开始选择的是通过mybatis-plus提供动态数据源,可是发现在quartz启动时候会默认的将数据计时器相关的11张表信息建立到主库,经过研究,最后只能手写一个动态数据源分配的方法。
开发步骤
- 依赖
采用springboot的默认依赖,这里不做表述。如果需要quartz计时操作就专门加个quartz的依赖 - 配置yml文件
springboot直接在application中写,两个数据源配置是必须的
spring:
datasource:
druid:
think-users:
url: jdbc:mysql://localhost:3306/think_users?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
driverClassName: com.mysql.cj.jdbc.Driver
username: root
password: 123456
think-quartz:
url: jdbc:mysql://localhost:3306/think_quartz?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
driverClassName: com.mysql.cj.jdbc.Driver
username: root
password: 123456
aop-patterns: com.unicom.xz.integrated.*
stat-view-servlet:
enabled: true
login-username: admin
login-password: admin
reset-enable: false
web-stat-filter:
enabled: true
filters: stat,wall,slf4j
filter:
stat:
slow-sql-millis: 1000
log-slow-sql: true
wall:
enabled: true
quartz:
properties:
org:
quartz:
scheduler:
# 集群名,区分同一系统的不同实例,若使用集群功能,则每一个实例都要使用相同的名字
instanceName: clusteredScheduler
# 若是集群下,每个instanceId必须唯一
instanceId: AUTO
threadPool:
#一般使用这个便可
class: org.quartz.simpl.SimpleThreadPool
#线程数量,不会动态增加
threadCount: 10
threadPriority: 5
threadsInheritContextClassLoaderOfInitializingThread: true
jobStore:
#选择JDBC的存储方式
class: org.quartz.impl.jdbcjobstore.JobStoreTX
driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
tablePrefix: QRTZ_
useProperties: false
isClustered: true
clusterCheckinInterval: 15000
dataSource:
qzDs:
provider: hikaricp
driver: com.mysql.cj.jdbc.Driver
URL: jdbc:mysql://localhost