Wie M. Deinum vorgeschlagen hat, würde ich auch die Konfiguration der Datenquellen in eine separate Datei packen.
Außerdem gibt es folgende Probleme in Ihrer Konfigurationsdatei:
-
SpringBatch sucht nach einer Datenquelle namens "dataSource" (beachten Sie das große S). Wenn es keine findet, sucht es nach einer beliebigen Datenquelle, die es findet. Wenn es jedoch mehr als eine findet, löst es eine Ausnahme aus -> die, die Sie beobachtet haben.
-
In Ihrer Konfigurationsdatei erstellen Sie zwei Datenquellen und injizieren eine (@Autowired Datasource dataSourceSecond). Dies würde das nächste Problem verursachen, da Sie keine Datenquelle mit diesem Namen haben. (Sie haben nur die Datenquellen "secondaryDataSource" und "primaryDataSource" definiert). Auch dies würde zu einer Ausnahme führen.
So würde ich meine Konfigurationen organisieren
@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;
}
...
Ich habe auch eine ausführlichere Antwort auf eine ähnliche Frage geschrieben:Ich möchte ein Spring-Batch-Projekt erstellen, bei dem Batch meine Datenquelle nicht verwendet