Както предложи М. Дейнум, бих поставил и конфигурацията на източниците на данни в отделен файл.
Освен това във вашия конфигурационен файл има следните проблеми:
-
SpringBatch търси източник на данни, наречен "dataSource" (обърнете внимание на главното S). Ако не намери такъв, търси всеки източник на данни, който намери. Ако обаче намери повече от едно, хвърля изключение -> това, което сте наблюдавали.
-
Във вашия конфигурационен файл създавате два източника на данни и инжектирате един (@Autowired Datasource dataSourceSecond). Това би причинило следващия проблем, тъй като нямате източник на данни с това име. (Вие сте дефинирали само източниците на данни „secondaryDataSource“ и „primaryDataSource“). Това също би довело до изключение.
Ето как бих организирал конфигурациите си
@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;
}
...
Написах и по-подробен отговор на подобен въпрос:Бих искал да създам пролетен пакетен проект, където пакетът не използва моя източник на данни