首页 > 解决方案 > 为石英调度程序使用不同的数据源,该数据源在 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.datasourcevalue 设置值?或者如果不可能为我的 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;
    }
}

标签: javaspringspring-bootquartz-scheduler

解决方案


推荐阅读