M. Deinumが提案したように、データソースの構成も別のファイルに入れます。
それ以外に、構成ファイルには次の問題があります。
-
SpringBatchは、「dataSource」という名前のデータソースを探します(大文字のSに注意してください)。見つからない場合は、見つかったデータソースを探します。ただし、複数検出された場合は、例外->観察したものがスローされます。
-
構成ファイルで、2つのデータソースを作成し、1つを挿入します(@Autowired Datasource dataSourceSecond)。この名前のデータソースがないため、これにより次の問題が発生します。 (データソース「secondaryDataSource」と「primaryDataSource」のみを定義しました)。これも例外につながります。
構成を整理する方法は次のとおりです
@Configuration
public DatasourceConfiguration {
@Bean
@ConfigurationProperties(prefix="spring.seconddatasource")
public javax.sql.DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
// note the new name: dataSource -> this is the name springBatch is looking for
@Bean
@ConfigurationProperties(prefix="spring.datasource")
public javax.sql.DataSource dataSource() {
return DataSourceBuilder.create().build();
}
}
@Configuration
@EnableBatchProcessing
@Import(DatasourceConfiguration.class)
public class BatchConfiguration {
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
// note the name
@Autowired
public DataSource secondaryDataSource;
@Bean
public JdbcCursorItemReader<User> reader()
{
JdbcCursorItemReader<User> reader=new JdbcCursorItemReader<>();
// note the name
reader.setDataSource(secondaryDataSource);
reader.setSql("Select ACCT_ID from ACCT_table FETCH FIRST 100 ROWS ONLY");
reader.setRowMapper(new UserRowerMapper());
return reader;
}
...
同様の質問に対するより徹底的な回答も書いています:バッチがデータソースを使用しないSpringバッチプロジェクトを作成したい