java - 为石英调度程序使用不同的数据源,该数据源在 spring boot 应用程序中使用
问题描述
我正在使用 Quartz Scheduler 开发 Spring Boot 应用程序。
我有一个 application.properties 和quartz.properties
文件,我在其中为每个部分配置我的数据源。
我使用配置文件来配置SchedulerFactoryBean
应用程序上下文,以便我可以@Autowired
在quartz Job 中为我的服务使用注释。但是Datasource
调度程序spring.datasource
的设置是而不是调度程序org.quartz.datasource
的石英属性文件中的设置
如何org.quartz.datasource
仅为 mySchedulerConfig
而不是spring.datasource
value 设置值?或者如果不可能为我的 Quartz 调度程序设置不同的数据源,最佳实践是什么?
提前致谢
代码 :
应用程序属性
# application.properties
spring.quartz.job-store-type=jdbc
spring.quartz.jdbc.initialize-schema=always
spring.datasource.url = jdbc:postgresql://databaseUrl
spring.datasource.username=myUsername
spring.datasource.password=myPassword
spring.datasource.driver-class-name.1=org.postgresql.Driver
spring.jpa.hibernate.ddl-auto=create
spring.security.basic.enable=false
石英属性
# Quartz.properties
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.tablePrefix = qrtz_
org.quartz.jobStore.dataSource = quartzDataSource
org.quartz.dataSource.quartzDataSource.driver = org.postgresql.Driver
org.quartz.dataSource.quartzDataSource.URL = jdbc:postgresql://QuartzDatabaseUrl
org.quartz.dataSource.quartzDataSource.user = myUser
org.quartz.dataSource.quartzDataSource.password = myPassword
org.quartz.jdbc.initialize-schema=always
org.quartz.scheduler.classLoadHelper.class=org.quartz.simpl.ThreadContextClassLoadHelper
org.quartz.dataSource.quartzDataSource.provider = hikaricp
SchedulerConfig.java:
// SchedulerConfig.java
@Configuration
public class SchedulerConfig {
@Autowired
private DataSource dataSource;
@Autowired
private ApplicationContext applicationContext;
@Autowired
private QuartzProperties quartzProperties;
@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
SchedulerJobFactory jobFactory = new SchedulerJobFactory();
jobFactory.setApplicationContext(applicationContext);
Properties properties = new Properties();
properties.putAll(quartzProperties.getProperties());
SchedulerFactoryBean factory = new SchedulerFactoryBean();
factory.setOverwriteExistingJobs(true);
factory.setDataSource(dataSource);
factory.setQuartzProperties(properties);
factory.setJobFactory(jobFactory);
return factory;
}
}
解决方案
推荐阅读
- java - 在java中删除元素表单链表,意外行为
- database - ClickHouse 副本不同步
- python - 为什么 {% if post.is_liked %} 在 home.html 中不起作用
- javascript - 将二进制文件的存储字节数组读取为文本文件中的逗号分隔值
- node.js - typescript express get 在单独的文件中不起作用
- java - Java:枚举类构造函数
- python - 用于 Python 的 Pandas DataFrame
- php - Neo4j PHP Graphaware '415 不支持的媒体类型'
- javascript - 使用带有下拉菜单的 v-for 对先前渲染和匹配的列表进行排序
- c++ - 如何基于元组元素进行递归?