Zoals M. Deinum suggereerde, zou ik ook de configuratie van de gegevensbronnen in een apart bestand zetten.
Daarnaast zijn er de volgende problemen in uw configuratiebestand:
-
SpringBatch zoekt naar een gegevensbron met de naam "dataSource" (let op de hoofdletter S). Als het er geen vindt, zoekt het naar elke gegevensbron die het vindt. Als het er echter meer dan één vindt, genereert het een uitzondering -> degene die je hebt waargenomen.
-
In uw configuratiebestand maakt u twee gegevensbronnen en injecteert u er één (@Autowired Datasource dataSourceSecond). Dit zou het volgende probleem veroorzaken, aangezien u geen gegevensbron met deze naam hebt. (U hebt alleen de gegevensbronnen "secondaryDataSource" en "primaryDataSource" gedefinieerd). Dit zou ook leiden tot een uitzondering.
Hier is hoe ik mijn configuraties zou organiseren
@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;
}
...
Ik heb ook een uitgebreider antwoord geschreven op een vergelijkbare vraag:Ik wil een spring batch-project maken waarbij batch mijn gegevensbron niet gebruikt