PS:问题没有彻底解决,先记录一下。问题产生原因是springboot版本问题,具体原因需要再找。(或许是quartz的配置方式变了)
版本:springboot2.6.0,quartz2.3.2
用的都是默认配置,没什么改动。以下是pom.xml里面的,贴出来参考。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
遇到问题:配置多数据源的时候提示找不到数据源。
数据库连接池使用的是springboot自带的hikari,我想单独为quartz配置数据库存储,在配置文件里面添加了2个datasource,但是运行的时候,quartz提示找不到datasource。
错误提示“Failed to obtain DB connection from data source ”
配置方式:
# Quartz 的配置,对应 QuartzProperties 配置类
quartz:
scheduler-name: clusteredScheduler # Scheduler 名字。默认为 schedulerName
job-store-type: jdbc # Job 存储器类型。默认为 memory 表示内存,可选 jdbc 使用数据库。
jdbc: # 使用 JDBC 的 JobStore 的时候,JDBC 的配置
initialize-schema: never # 是否自动使用 SQL 初始化 Quartz 表结构。这里设置成 never ,我们手动创建表结构。
auto-startup: true # Quartz 是否自动启动
startup-delay: 0 # 延迟 N 秒启动
wait-for-jobs-to-complete-on-shutdown: true # 应用关闭时,是否等待定时任务执行完成。默认为 false ,建议设置为 true
overwrite-existing-jobs: false # 是否覆盖已有 Job 的配置
properties: # 添加 Quartz Scheduler 附加属性,更多可以看 http://www.quartz-scheduler.org/documentation/2.4.0-SNAPSHOT/configuration.html 文档
org:
quartz:
dataSource:
#provider: hikaricp
# JobStore 相关配置
jobStore:
# 数据源名称
dataSource: quartzDataSource # 使用的数据源
class: org.quartz.impl.jdbcjobstore.JobStoreTX # JobStore 实现类
driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
tablePrefix: QRTZ_ # Quartz 表前缀
isClustered: true # 是集群模式
clusterCheckinInterval: 1000
useProperties: false
# 线程池相关配置
threadPool:
threadCount: 25 # 线程池大小。默认为 10 。
threadPriority: 5 # 线程优先级
class: org.quartz.simpl.SimpleThreadPool # 线程池类型
配置其实没有问题的,经过测试springboot版本切换到2.5.6及以下,这样配置是没有问题的,可以正常运行。
springboot2.5.7及以上版本,这样在配置文件里面配置quartz就有问题。
但是,springboot2.5.7及以上版本,使用默认的配置(pom里面配置上quartz,什么配置文件不用写),可以正常运行。
先记录吧,简单看了springboot官网文档和quartz官网文档,没有找到具体说明,有时间了再研究,一是继续查看下相应文档,看看是不是配置方式改了,二是使用java类进行配置,有后续会更新。