Como M. Deinum sugeriu, eu também colocaria a configuração das fontes de dados em um arquivo separado.
Além disso, existem os seguintes problemas em seu arquivo de configuração:
-
SpringBatch procura uma fonte de dados chamada "dataSource" (observe o S maiúsculo). Se não encontrar um, ele procura por qualquer fonte de dados que encontrar. No entanto, se encontrar mais de um, ele lança uma exceção -> aquela que você observou.
-
Em seu arquivo de configuração, você cria duas fontes de dados e injeta uma (@Autowired Datasource dataSourceSecond). Isso causaria o próximo problema, já que você não tem uma fonte de dados com esse nome. (Você definiu apenas as fontes de dados "secondaryDataSource" e "primaryDataSource"). Isso também levaria a uma exceção.
Aqui está como eu organizaria minhas configurações
@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;
}
...
Também escrevi uma resposta mais completa para uma pergunta semelhante:Gostaria de criar um projeto em lote de mola em que o lote não usa minha fonte de dados