Come suggerito da M. Deinum, metterei anche la configurazione delle origini dati in un file separato.
Oltre a ciò, ci sono i seguenti problemi nel tuo file di configurazione:
-
SpringBatch cerca un'origine dati denominata "dataSource" (notare la S maiuscola). Se non ne trova uno, cerca qualsiasi origine dati trova. Tuttavia, se ne trova più di uno, genera un'eccezione -> quella che hai osservato.
-
Nel file di configurazione, crei due origini dati e ne inserisci una (@Autowired Datasource dataSourceSecond). Ciò causerebbe il problema successivo, poiché non si dispone di un'origine dati con questo nome. (Hai definito solo le origini dati "secondaryDataSource" e "primaryDataSource"). Ciò comporterebbe anche un'eccezione.
Ecco come organizzerei le mie configurazioni
@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;
}
...
Ho anche scritto una risposta più approfondita a una domanda simile:Vorrei creare un progetto batch di primavera in cui batch non utilizza la mia origine dati