【问题标题】:spring-boot-starter-quartz jdbc vs memory jobstore in different environementspring-boot-starter-quartz jdbc vs不同环境下的内存jobstore
【发布时间】:2021-05-09 04:22:52
【问题描述】:

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

在本地环境中,我想使用内存作业存储(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'这样的异常@

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

不然怎么办?

【问题讨论】:

  • org.springframework.beans.factory.annotation.Value有什么要说的吗?坚持默认?
  • 我不明白你的评论罗伯特。我正在寻找一种组织属性文件的方法。我不需要使用任何@value,因为所有需要用作属性的东西都由启动器提供。可能是我的问题不够清楚
  • 对不起,也许我误解了,我在想解决你问题的一种方法是在 Java E.G. 中设置一个默认值。 @Value("${spring.quartz.properties.org.quartz.jobStore.driverDelegateClass:someDefault}") private String driverDelegateClass; 这样,如果你的属性文件中有一个值,它就会接受它,如果没有,它会默认。
  • 确实我做不到。我根本无法在本地环境中使用 driverDelegateClass 属性(即使用内存作业存储)。这似乎是初学者或石英库设计问题(或至少缺乏灵活性)。

标签: spring spring-boot environment-variables quartz


【解决方案1】:

我的方法不是很好。 我们可以将 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

【讨论】:

    猜你喜欢
    • 2014-04-07
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 2021-05-07
    • 2016-01-29
    • 1970-01-01
    相关资源
    最近更新 更多