जैसा कि एम. डीनम ने सुझाव दिया था, मैं डेटा स्रोतों के कॉन्फ़िगरेशन को भी एक अलग फ़ाइल में रखूंगा।
इसके अलावा, आपकी कॉन्फ़िगरेशन फ़ाइल में निम्न समस्याएं हैं:
-
स्प्रिंगबैच "डेटासोर्स" नामक डेटा स्रोत की तलाश करता है (पूंजी एस पर ध्यान दें)। अगर उसे कोई नहीं मिलता है, तो वह उसे मिलने वाले किसी भी डेटा स्रोत की तलाश करता है। हालांकि, अगर इसे एक से अधिक मिलते हैं, तो यह एक अपवाद देता है -> जिसे आपने देखा था।
-
अपनी कॉन्फ़िगरेशन फ़ाइल में, आप दो डेटा स्रोत बनाते हैं और एक (@Autowired Datasource dataSourceSecond) इंजेक्ट करते हैं। यह अगली समस्या का कारण बनेगा, क्योंकि आपके पास इस नाम का कोई डेटा स्रोत नहीं है। (आपने केवल डेटा स्रोत "सेकेंडरीडेटासोर्स" और "प्राथमिकडेटा स्रोत" को परिभाषित किया है)। इससे अपवाद भी होगा।
यहां बताया गया है कि मैं अपने कॉन्फ़िगरेशन को कैसे व्यवस्थित करूंगा
@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;
}
...
मैंने इसी तरह के प्रश्न का अधिक गहन उत्तर भी लिखा है:मैं एक स्प्रिंग बैच प्रोजेक्ट बनाना चाहूंगा जहां बैच मेरे डेटा स्रोत का उपयोग न करे