【发布时间】: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