मैं एक स्प्रिंग बूट बैच अनुप्रयोग है शेड्यूल करने का तरीका:एक स्प्रिंग बूट बैच आवेदन
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class LoadApplication {
public static void main(String[] args) {
SpringApplication.run(LoadApplication.class, args);
}
}
एक @Configuration
वर्ग भी @EnableBatchProcessing
साथ एनोटेट में, मैं निम्नलिखित बैच कार्य सेम को परिभाषित किया है:
@Bean
public Job loadJob(JobBuilderFactory jobs, Step stepLoadFile, Step stepArchiveFile) {
return jobs.get("loadJob")
.incrementer(new RunIdIncrementer())
.start(stepLoadFile)
.next(stepArchiveFile)
.build();
}
बैच जॉब का stepLoadFile
एक सपाट फ़ाइल पढ़ता है (नीचे देखें) और डेटाबेस डेटा को डेटाबेस में लिखता है। stepArchiveFile
फिर फ़ाइल को एक अलग निर्देशिका में ले जाता है।
आम तौर पर, किसी निर्दिष्ट समय पर नौकरी (मंगलवार - शनिवार) में नौकरी चलाने की आवश्यकता होती है। हालांकि, अगर फ्लैट फ़ाइल नहीं मिली है, तो नौकरी विफल हो जाती है और जब तक यह सफल नहीं हो जाती है या अधिकतम संख्या (उदाहरण के 5) प्रयासों को हिट नहीं किया जाता है तब तक हर 30 मिनट फिर से चालू करने की आवश्यकता होती है। एक बार फिर से सफल होने के बाद, नौकरी अगले सामान्य रन टाइम तक फिर से नहीं चलनी चाहिए। इसके अलावा, प्रणाली को आदर्श रूप से एक ही नौकरी के समवर्ती रनों को रोकना चाहिए। यह सब कैसे किया जा सकता है?
नोट: पुन: चालू करने की आवश्यकता नहीं है जहां पिछले नौकरी चलाने में असफल रहा। ऐसा इसलिए है क्योंकि खंड में फ़ाइल की वस्तुओं की संख्या से बड़ा सेट सेट किया गया है।
मैं में मेरी @Configuration
वर्ग इस कोशिश की (नोट: मैं भी विन्यास और मुख्य वर्ग के लिए @EnableRetry
जोड़ा):
@Bean
public ItemReader<Test> reader(LineMapper<Test> lineMapper, ApplicationProperties properties) {
FlatFileItemReader<Test> flatFileItemReader = new FlatFileItemReader<Test>() {
@Override
@Retryable(value = {ItemStreamException.class}, maxAttempts=5)
public void open(ExecutionContext executionContext) throws ItemStreamException {
super.open(executionContext);
}
@Override
@Retryable(maxAttempts=5)
public Holding read() throws UnexpectedInputException, ParseException, Exception {
return super.read();
}
};
flatFileItemReader.setResource(new FileSystemResource(properties.getLoadFile()));
flatFileItemReader.setLineMapper(lineMapper);
return flatFileItemReader;
}
ItemStreamException
फेंक दिया और आवेदन बाहर निकलता है पुन: प्रयास के बिना किया जाता है।
प्रतिक्रिया के लिए धन्यवाद। दुर्भाग्यवश हालांकि, मुझे नहीं लगता कि यह मुझे जो कुछ चाहिए उसे पूरा करता है। नौकरी को प्रति दिन केवल एक बार चलाने की आवश्यकता होती है। 'अनुसूचित 'में, आप इसे हर 30 मिनट चलते हैं। जब नौकरी की विफलता होती है, तो मुझे इसे हर 30 मिनट तक फिर से शुरू करने की आवश्यकता होती है। 'पुनः प्रयास-सीमा' के साथ, मुझे लगता है कि यह तुरंत 30 मिनट प्रतीक्षा करने के बजाय पुनः प्रयास करेगा। मुझे यह भी विश्वास है कि 'पुनः प्रयास-सीमा' नौकरी के स्तर की बजाय आइटम स्तर पर है। अगर मैं इनमें से किसी भी मुद्दे पर गलत हूं तो कृपया मुझे सही करें। – James