我正在尝试让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()
方法时,dataSource
为null
。但是,如果我将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
类中的数据源
答案 0 :(得分:2)
如果我使用" org.springframework:spring-context-support:4.0.2.RELEASE"你的应用程序启动(模式错误,这是预期的) (" org.springframework:spring-support:2.0.8"如果它存在必须已经有近10年的历史了,当然不能与Boot或Quartz 2兼容)。