如何解决不同环境下的spring-boot-starter-quartz jdbc vs memory jobstore
我在多个环境项目中使用 spring-boot-starter-quartz。
在本地环境中我想使用内存作业存储(spring.quartz.job-store-type=memory
)
在所有其他环境中(preprod、prod ...)我想使用 jdbc jobstore (spring.quartz.job-store-type=jdbc
)
我想在默认的 application.properties 文件中放入所有常用属性,并仅覆盖本地 env 属性文件 (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'
一个简单的解决方案是在每个文件中重复所需的属性(我绝对不想要这个解决方案)。
否则我该怎么办?
解决方法
我的方法不是很好。
我们可以将 jdbc jobstore 与 h2 数据库一起使用。唯一改变的是 driverDelegateClass。对于 h2,我们需要使用 driverDelegateClass spring.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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。