Jak navrhl M. Deinum, dal bych také konfiguraci datových zdrojů do samostatného souboru.
Kromě toho jsou v konfiguračním souboru následující problémy:
-
SpringBatch hledá zdroj dat s názvem „dataSource“ (všimněte si velkého S). Pokud žádný nenajde, hledá jakýkoli zdroj dat, který najde. Pokud však najde více než jednu, vyvolá výjimku -> tu, kterou jste pozorovali.
-
V konfiguračním souboru vytvoříte dva zdroje dat a jeden vložíte (@Autowired Datasource dataSourceSecond). To by způsobilo další problém, protože nemáte zdroj dat s tímto názvem. (Definovali jste pouze zdroje dat "secondaryDataSource" a "primaryDataSource"). To by také vedlo k výjimce.
Zde je návod, jak bych uspořádal své konfigurace
@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;
}
...
Napsal jsem také důkladnější odpověď na podobnou otázku:Chtěl bych vytvořit jarní dávkový projekt, kde batch nepoužívá můj zdroj dat