Som M. Deinum foreslog, ville jeg også lægge konfigurationen af datakilderne i en separat fil.
Udover det er der følgende problemer i din konfigurationsfil:
-
SpringBatch leder efter en datakilde med navnet "dataSource" (bemærk det store S). Hvis den ikke finder en, søger den efter enhver datakilde, den finder. Men hvis den finder mere end én, kaster den en undtagelse -> den du observerede.
-
I din konfigurationsfil opretter du to datakilder og injicerer én (@Autowired Datasource dataSourceSecond). Dette ville forårsage det næste problem, da du ikke har en datakilde med dette navn. (Du har kun defineret datakilderne "secondaryDataSource" og "primaryDataSource"). Dette ville også føre til en undtagelse.
Her er, hvordan jeg ville organisere mine konfigurationer
@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;
}
...
Jeg har også skrevet et mere grundigt svar på et lignende spørgsmål:Jeg vil gerne oprette et forårsbatch-projekt, hvor batch ikke bruger min datakilde