如何在Apache Camel Quartz中动态配置quartz.properties的JobStore数据源
关于Apache Camel Quartz组件动态配置JobStore数据源的问题
我目前正在使用Apache Camel的Quartz组件运行定时路由,已在quartz.properties中完成JDBC JobStore的基础配置:
org.quartz.jobStore.useProperties = true org.quartz.jobStore.dataSource=myDataSource org.quartz.jobStore.tablePrefix = II_QRTZ_ org.quartz.dataSource.myDataSource.driver = com.ibm.db2.jcc.DB2Driver org.quartz.dataSource.myDataSource.URL = url org.quartz.dataSource.myDataSource.user = example-user org.quartz.dataSource.myDataSource.password = example-pwd
现在需要根据开发/测试/生产不同服务器环境,设置对应的数据源及凭证,但无法实现数据源的动态配置。
已尝试的解决方案
1. 通过@QuartzDataSource注解引用现有数据源Bean
我们已有可根据环境连接对应数据库的数据源Bean,尝试用@QuartzDataSource注解引用:
// DataSourceConfig.java @Bean(name="myDataSource") @QuartzDataSource @ConfigurationProperties(prefix="org.quartz.mydatasource") @Autowired public DataSource myDataSource(@Qualifier("applicationProps") BasePropReader applicationProperties) { String connectionString = (String) applicationProperties.get("spring.datasource.connection.url"); return buildDataSource(applicationProperties, "example-user", "example-pwd", "com.ibm.db2.jcc.DB2Driver", connectionString); }
对应的quartz.properties配置:
org.quartz.jobStore.useProperties = true org.quartz.jobStore.dataSource=myDataSource org.quartz.jobStore.tablePrefix = II_QRTZ_
结果:未达到动态配置效果。
2. Web应用中使用JNDI URL引用环境数据源
尝试通过JNDI URL引用环境预配置的数据源:
org.quartz.jobStore.useProperties = true org.quartz.jobStore.dataSource=myDataSource org.quartz.jobStore.tablePrefix = II_QRTZ_ org.quartz.dataSource.myDataSource.jndiURL=java:/MYDATASOURCE
结果:仅适用于Web应用场景,无法满足多环境动态切换需求。
3. 从application.properties设置属性
尝试将Quartz数据源配置放在application.properties中,但未生效,推测原因是使用了Camel的Quartz组件。
4. 在quartz.properties中读取环境变量
尝试在quartz.properties中读取环境变量,但读取到的变量均为空字符串。
5. 通过XML上下文定义Quartz组件并指定环境属性文件
尝试在上下文XML中定义Quartz组件Bean,根据Spring激活的环境传递对应属性文件:
<bean id="quartz" class="org.apache.camel.component.quartz.QuartzComponent"> <property name="propertiesFile" value="org/quartz/quartz-dev.properties"/> </bean>
结果:组件未识别指定的属性文件。
核心疑问
Apache Camel的Quartz组件是否支持动态配置JobStore数据源?我们希望继续使用Camel以避免大量重构。
内容的提问来源于stack exchange,提问作者Peter He
相关产品推荐
相关产品推荐

