Seperti yang disarankan M. Deinum, saya juga akan meletakkan konfigurasi sumber data di file terpisah.
Selain itu, ada masalah berikut di file konfigurasi Anda:
-
SpringBatch mencari sumber data bernama "dataSource" (perhatikan huruf kapital S). Jika tidak menemukannya, ia akan mencari sumber data apa pun yang ditemukannya. Namun, jika menemukan lebih dari satu, ia mengeluarkan pengecualian -> yang Anda amati.
-
Dalam file konfigurasi Anda, Anda membuat dua sumber data dan menyuntikkan satu (@Sumber Data Autowired dataSourceSecond). Ini akan menyebabkan masalah berikutnya, karena Anda tidak memiliki sumber data dengan nama ini. (Anda hanya mendefinisikan sumber data "secondaryDataSource" dan "primaryDataSource"). Ini juga akan menyebabkan pengecualian.
Inilah cara saya mengatur konfigurasi saya
@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;
}
...
Saya juga telah menulis jawaban yang lebih teliti untuk pertanyaan serupa:Saya ingin membuat proyek batch musim semi yang tidak menggunakan sumber data saya