首页 > 解决方案 > spring-boot-starter-quartz jdbc vs不同环境下的内存jobstore

问题描述

我在几个环境项目中使用 spring-boot-starter-quartz。

在本地环境中,我想使用内存 jobstore( spring.quartz.job-store-type=memory) 在所有其他环境(preprod,prod ...)中,我想使用 jdbc jobstore( spring.quartz.job-store-type=jdbc)

我想将所有常用属性放入默认的 application.properties 文件中,并仅覆盖本地环境属性文件(application-local.properties)中的有用属性

所以通常我会把它放在 application.properties

spring.quartz.job-store-type=jdbc
spring.quartz.jdbc.initialize-schema=never
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
spring.quartz.properties.org.quartz.jobStore.useProperties=false
spring.quartz.properties.org.quartz.jobStore.tablePrefix=qrtz_
spring.quartz.properties.org.quartz.jobStore.isClustered=false

在 application-local.properties

spring.quartz.jdbc.initialize-schema=always
spring.quartz.job-store-type=MEMORY

Quartz 不喜欢这个配置。我面临着例外java.lang.NoSuchMethodException: No setter for property 'tablePrefix'

一个简单的解决方案包括在每个文件中重复所需的属性(我绝对不想要这个解决方案)。

我该怎么做?

标签: springspring-bootenvironment-variablesquartz

解决方案


我的方法不是很好。我们可以将 jdbc jobstore 与 h2 数据库一起使用。唯一改变的是 driverDelegateClass。对于 h2,我们需要使用 driverDelegateClassspring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.HSQLDBDelegate.

所以这个配置将与 h2 数据库一起使用:

spring.quartz.job-store-type=jdbc
spring.quartz.jdbc.initialize-schema=always
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.HSQLDBDelegate
spring.quartz.properties.org.quartz.jobStore.useProperties=false
spring.quartz.properties.org.quartz.jobStore.tablePrefix=qrtz_
spring.quartz.properties.org.quartz.jobStore.isClustered=false

推荐阅读