在创建应用程序 bean 之前初始化 Spring 个批处理 DB

Initialize Spring batch DB before application bean is created

我正在尝试像这样创建一个 bean:

@Bean
public Clock clock(JobExplorer explorer, Environment environment) {
   // Check last run time of job and create a Clock bean
}

但是当应用程序启动时,我收到错误消息:ORA-00942: table or view does not exist 因为 spring 批处理模式尚未由 spring 引导程序的 BatchAutoConfiguration 创建。

然后,我尝试这样做:

 @Bean
 @ConditionOnBean(BatchDatabaseInitializer.class)
 public Clock clock(JobExplorer explorer, Environment environment) {
   // Check last run time of job and create a Clock bean
 }

这将错误从创建时钟 bean 时转移到创建需要 Clock 的 bean 时:

@Bean(name = "reader")
public ItemReader<Record> itemReader(
              JdbcTemplate jdbcTemplate, Clock clock) {
     // Create item reader
}

Error: No qualifying bean of type [java.time.Clock] found for dependency

这一直在级联。如果我将 @ConditionalOnBean 放在 itemReader 方法上,那么当创建需要 itemReader 的 bean 时,我会得到相同的 "No qualifying bean" 错误。

那么,如何确保 spring 在创建 bean 之前初始化批处理模式?

您尝试过使用 @DependsOn() 注释吗?我不知道 ConditionOnBean..