使用Quartz和Spring Boot - 注入顺序根据返回类型的方法而改变

时间:2014-03-20 17:43:16

标签: spring quartz-scheduler spring-boot

我正在尝试让Quartz使用Spring Boot,并且无法让注入正常工作。我基于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正确地注入了通过读取application.properties创建的数据源,bean已构建,一切正常然后我得到一个后续错误,说Quartz无法从数据库中检索任何作业,这是正常的,因为我还没有把架构放到位。

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

此类是唯一使用@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类中的数据源

1 个答案:

答案 0 :(得分:2)

如果我使用" org.springframework:spring-context-support:4.0.2.RELEASE"你的应用程序启动(模式错误,这是预期的) (" org.springframework:spring-support:2.0.8"如果它存在必须已经有近10年的历史了,当然不能与Boot或Quartz 2兼容)。