spring - 将 Quartz 与 Spring Boot 结合使用 - 注入(inject)顺序根据方法的返回类型而变化

标签 spring quartz-scheduler spring-boot

我正在尝试让 Quartz 与 Spring Boot 一起工作,但无法使注入(inject)正常工作。我以 here 所示的示例为基础

这是我的引导类:

@ComponentScan
@EnableAutoConfiguration
public class MyApp {

    @Autowired
    private DataSource dataSource;

    @Bean
    public JobFactory jobFactory() {
        return new SpringBeanJobFactory();
    }

    @Bean
    public SchedulerFactoryBean quartz() {
        final SchedulerFactoryBean bean = new SchedulerFactoryBean();
        bean.setJobFactory(jobFactory());
        bean.setDataSource(dataSource);
        bean.setConfigLocation(new ClassPathResource("quartz.properties"));
        ...
        return bean;
    }

    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }

}

当 Spring 调用 quartz() 方法时,dataSourcenull。但是,如果我将 quartz() 方法的返回类型更改为 Object,则 dataSource 会正确注入(inject)通过读取 创建的数据源>application.properties,bean 已构建,一切正常,我收到一个后续错误,指出 Quartz 无法从数据库检索任何作业,这是正常的,因为我还没有将架构放置到位.

我尝试在 quartz() 方法上添加 @DependsOn("dataSource") 注释,但这没有任何区别。

该类是唯一用@Configuration注释的类。

这是我的依赖项(我正在使用 Maven,但由于空间原因这样呈现它们):

org.springframework.boot:spring-boot-starter-actuator:1.0.0.RC4
org.springframework.boot:spring-boot-starter-jdbc:1.0.0.RC4
org.springframework.boot:spring-boot-starter-web:1.0.0.RC4
org.quartz-scheduler:quartz:2.2.1
org.springframework:spring-support:2.0.8

还有父级:

org.springframework.boot:spring-boot-starter-parent:1.0.0.RC4

最后是quartz.properties的内容:

org.quartz.threadPool.threadCount = 3
org.quartz.jobStore.class=org.springframework.scheduling.quartz.LocalDataSourceJobStore
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate

我做错了什么?

(我见过 this 问题,但该问题初始化 @Configuration 类中的数据源)

最佳答案

如果我使用“org.springframework:spring-context-support:4.0.2.RELEASE”(“org.springframework:spring-support:2.0.8”,您的应用程序将启动(出现架构错误,这是预期的) “如果它曾经存在的话,现在肯定已经有近 10 年的历史了,并且肯定与 Boot 或 Quartz 2 不兼容)。

关于spring - 将 Quartz 与 Spring Boot 结合使用 - 注入(inject)顺序根据方法的返回类型而变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22541071/

相关文章:

java - Springboot应用类中初始化Service类和Repository类

spring - application.properties 和 application.yml 可以混合吗?

java - 如何在没有 spring @Component 或 @Bean 注释的情况下在我的项目中运行不同项目的 servlet-filter

mysql - Spring JPA hibernate MariaDB

c# - 在 Quartz.NET 中以编程方式编辑作业 Cron Expression - 什么方法?

spring - 当 userRepositary 尝试在数据库中保存新用户时,我的 validator 失败

java - 如何使用 Spring Shell 在 Spring Boot Web 应用程序中构建控制台命令?

java - IOC容器: de-duplicating the configuration code

quartz-scheduler - quartz 作业详细请求恢复

java - quartz 触发器大量创建