मेरे पास स्प्रिंग बैच में एक प्रोजेक्ट है जहां मुझे दो .txt फाइलों से पढ़ना चाहिए, एक में कई लाइनें हैं और दूसरी एक कंट्रोल फाइल है जिसमें लाइनों की संख्या है जिसे पहली फाइल से पढ़ा जाना चाहिए। मुझे पता है कि मुझे इन फ़ाइलों को संसाधित करने के लिए विभाजन का उपयोग करना चाहिए क्योंकि पहला बहुत बड़ा है और मुझे इसे विभाजित करने और विफल होने की स्थिति में इसे पुनरारंभ करने में सक्षम होने की आवश्यकता है, लेकिन मुझे नहीं पता कि पाठक को इन फ़ाइलों को कैसे संभालना चाहिए क्योंकि दोनों फाइलें उनकी पंक्तियों में समान चौड़ाई नहीं है। किसी भी फाइल में हेडर या सेपरेटर नहीं है, इसलिए मुझे मुख्य रूप से पहले वाले में एक सीमा के अनुसार फ़ील्ड प्राप्त करना है।

मेरी एक शंका यह है कि क्या मुझे दोनों को एक ही पाठक में पढ़ना चाहिए? और एक ही पाठक का उपयोग करने के मामले में दोनों फाइलों को संभालने के लिए मुझे पाठक फिक्स्ड लम्बाईटोकनाइज़र और डिफॉल्टलाइनमैपर कैसे सेट करना चाहिए ??

ये इनपुट फ़ाइल और नियंत्रण फ़ाइल के उदाहरण हैं

- इनपुट फ़ाइल

09459915032508501149343120020562580292792085100204001530012282921883101

txt फ़ाइल में ज़्यादा से ज़्यादा 50000 लाइनें हो सकती हैं

- नियंत्रण फ़ाइल

00128*

इसकी केवल एक पंक्ति है

धन्यवाद!

0
Cris 7 जिंदा 2020, 18:15

1 उत्तर

सबसे बढ़िया उत्तर

मुझे दो .txt फ़ाइलों से पढ़ना चाहिए, एक में कई लाइनें हैं और दूसरी एक नियंत्रण फ़ाइल है जिसमें पहली फ़ाइल से पढ़ी जाने वाली पंक्तियों की संख्या है

आपके उपयोग के मामले से निपटने का एक संभावित तरीका यहां दिया गया है:

  • पहला चरण (टास्कलेट) बनाएं जो नियंत्रण फ़ाइल को पढ़ता है और कार्य निष्पादन संदर्भ में पढ़ने के लिए पंक्तियों की संख्या डालता है (इसे अगले चरण के साथ साझा करने के लिए)
  • स्टेप स्कोप्ड रीडर के साथ एक दूसरा चरण (चंक-ओरिएंटेड) बनाएं जो केवल पहले चरण द्वारा गणना की गई लाइनों की संख्या को पढ़ने के लिए कॉन्फ़िगर किया गया हो (नौकरी निष्पादन संदर्भ से मूल्य प्राप्त करें)

आप यहां चरणों के बीच डेटा साझा करने के बारे में अधिक पढ़ सकते हैं: https://docs.spring.io/spring-batch/docs/4.2.x/reference/html/common-patterns.html#passingDataToFutureSteps

0
Mahmoud Ben Hassine 8 जिंदा 2020, 20:20