स्प्रिंग बैच - पाठक, लेखक और प्रोसेसर

एक Item Reader एक विशेष स्रोत से स्प्रिंग बैच एप्लिकेशन में डेटा पढ़ता है, जबकि ए Item Writer स्प्रिंग बैच एप्लिकेशन के डेटा को किसी विशेष गंतव्य पर लिखते हैं।

एक Item processorएक वर्ग है जिसमें प्रसंस्करण कोड होता है जो स्प्रिंग बैच में पढ़े गए डेटा को संसाधित करता है। यदि एप्लिकेशन एन रिकॉर्ड पढ़ता है तो प्रोसेसर में कोड प्रत्येक रिकॉर्ड पर निष्पादित किया जाएगा।

chunk का एक बच्चा तत्व है tasklet। इसका उपयोग पढ़ने, लिखने और प्रसंस्करण कार्य करने के लिए किया जाता है। हम इस तत्व का उपयोग करके पाठक, लेखक और प्रोसेसर को कॉन्फ़िगर कर सकते हैं, जैसा कि नीचे दिखाया गया है।

<batch:job id = "helloWorldJob"> 
   <batch:step id = "step1"> 
      <batch:tasklet> 
         <batch:chunk reader = "cvsFileItemReader" writer = "xmlItemWriter" 
            processor = "itemProcessor" commit-interval = "10"> 
         </batch:chunk> 
      </batch:tasklet> 
   </batch:step> 
</batch:job>

स्प्रिंग बैच पाठकों और लेखकों को विभिन्न फ़ाइल सिस्टम / डेटाबेस जैसे कि MongoDB, Neo4j, MySQL, XML, flatfile, CSV, आदि को पढ़ने और लिखने के लिए प्रदान करता है।

अपने आवेदन में एक पाठक को शामिल करने के लिए, आपको उस पाठक के लिए एक बीन को परिभाषित करने की आवश्यकता है, बीन के भीतर सभी आवश्यक गुणों को मान प्रदान करें और पास करें id ऐसे तत्व के गुण के रूप में सेम के रूप में reader (उसी के लिए writer)।

ItemReader

यह एक कदम (एक बैच प्रक्रिया का) की इकाई है जो डेटा पढ़ता है। एक आइटम राइडर एक समय में एक आइटम पढ़ता है। स्प्रिंग बैच एक इंटरफ़ेस प्रदान करता हैItemReader। सबreaders इस इंटरफ़ेस को लागू करें।

विभिन्न स्रोतों से पढ़ने के लिए स्प्रिंग बैच द्वारा प्रदान किए गए कुछ पूर्वनिर्धारित आइटमरीडर कक्षाएं निम्नलिखित हैं।

रीडर उद्देश्य
FlatFIleItemReader फ्लैट फ़ाइलों से डेटा पढ़ने के लिए।
StaxEventItemReader XML फ़ाइलों से डेटा पढ़ने के लिए।
StoredProcedureItemReader एक डेटाबेस की संग्रहीत प्रक्रियाओं से डेटा पढ़ने के लिए।
JDBCPagingItemReader रिलेशनल डेटाबेस डेटाबेस से डेटा पढ़ने के लिए।
MongoItemReader MongoDB से डेटा पढ़ने के लिए।
Neo4jItemReader Neo4jItemReader से डेटा पढ़ने के लिए।

हमें कॉन्फ़िगर करने की आवश्यकता है ItemReadersफलियाँ बनाकर। निम्नलिखित का एक उदाहरण हैStaxEventItemReader जो XML फ़ाइल से डेटा पढ़ता है।

<bean id = "mysqlItemWriter" 
   class = "org.springframework.batch.item.xml.StaxEventItemWriter"> 
   <property name = "resource" value = "file:xml/outputs/userss.xml" /> 
   <property name = "marshaller" ref = "reportMarshaller" /> 
   <property name = "rootTagName" value = "Tutorial" /> 
</bean> 

<bean id = "reportMarshaller" 
   class = "org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
   <property name = "classesToBeBound"> 
      <list> 
         <value>Tutorial</value> 
      </list> 
   </property> 
</bean>

जैसा कि देखा गया है, कॉन्फ़िगर करते समय, हमें संबंधित पाठक के संबंधित वर्ग का नाम निर्दिष्ट करना होगा और हमें सभी आवश्यक गुणों को मान प्रदान करना होगा।

ItemWriter

यह का तत्व है stepएक बैच प्रक्रिया जो डेटा लिखती है। एक आइटमविटर एक आइटम को एक बार लिखता है। स्प्रिंग बैच एक इंटरफ़ेस प्रदान करता हैItemWriter। सभी लेखक इस इंटरफ़ेस को लागू करते हैं।

विभिन्न स्रोतों से पढ़ने के लिए स्प्रिंग बैच द्वारा प्रदान किए गए कुछ पूर्वनिर्धारित आईटीडाइटर कक्षाएं निम्नलिखित हैं।

लेखक उद्देश्य
FlatFIleItemWriter फ्लैट फ़ाइलों में डेटा लिखने के लिए।
StaxEventItemWriter XML फ़ाइलों में डेटा लिखने के लिए।
StoredProcedureItemWriter एक डेटाबेस की संग्रहीत प्रक्रियाओं में डेटा लिखने के लिए।
JDBCPagingItemWriter संबंधपरक डेटाबेस डेटाबेस में डेटा लिखने के लिए।
MongoItemWriter MongoDB में डेटा लिखने के लिए।
Neo4jItemWriter Neo4j में डेटा लिखने के लिए।

उसी तरह, हमें सेम बनाकर ItemWriters को कॉन्फ़िगर करना होगा। निम्नलिखित का एक उदाहरण हैJdbcCursorItemReader जो MySQL डेटाबेस में डेटा लिखता है।

<bean id = "dbItemReader"
   class = "org.springframework.batch.item.database.JdbcCursorItemReader" scope = "step">
   <property name = "dataSource" ref = "dataSource" />
   <property name = "sql" value = "select * from tutorialsdata" />
   <property name = "rowMapper">
      <bean class = "TutorialRowMapper" /> 
   </property>
</bean>

आइटम प्रोसेसर

ItemProcessor: डेटा को संसाधित करने के लिए एक ItemProcessor का उपयोग किया जाता है। जब दी गई वस्तु मान्य नहीं होती है तो वह वापस लौट आती हैnull, यह दिए गए आइटम को संसाधित करता है और संसाधित परिणाम लौटाता है। अंतरपटलItemProcessor<I,O> प्रोसेसर का प्रतिनिधित्व करता है।

Tasklet class - जब नहीं reader तथा writerदिया जाता है, एक टास्कलेट स्प्रिंगबैच के लिए एक प्रोसेसर के रूप में कार्य करता है। यह केवल एकल कार्य को संसाधित करता है।

हम इंटरफ़ेस को लागू करके एक कस्टम आइटम प्रोसेसर को परिभाषित कर सकते हैं ItemProcessor पैकेज का org.springframework.batch.item.ItemProcessor। यह आइटमप्रोसेसर वर्ग किसी ऑब्जेक्ट को स्वीकार करता है और डेटा को संसाधित करता है और संसाधित डेटा को किसी अन्य ऑब्जेक्ट के रूप में लौटाता है।

एक बैच प्रक्रिया में, यदि "n"रिकॉर्ड या डेटा तत्व पढ़े जाते हैं, फिर प्रत्येक रिकॉर्ड के लिए, यह डेटा को पढ़ेगा, इसे प्रोसेस करेगा, और लेखक में डेटा लिखेगा। डेटा को संसाधित करने के लिए, यह पारित प्रोसेसर पर निर्भर करता है।

उदाहरण के लिए, मान लें कि आपने किसी विशेष PDF दस्तावेज़ को लोड करने के लिए कोड लिखा है, एक नया पृष्ठ बनाएं, डेटा आइटम को एक सारणीबद्ध प्रारूप में पीडीएफ पर लिखें। यदि आप इस एप्लिकेशन को निष्पादित करते हैं, तो यह XML दस्तावेज़ से सभी डेटा आइटम को पढ़ता है, उन्हें MySQL डेटाबेस में संग्रहीत करता है, और उन्हें दिए गए पीडीएफ दस्तावेज़ में अलग-अलग पृष्ठों में प्रिंट करता है।

उदाहरण

निम्नलिखित एक नमूना ItemProcessor वर्ग है।

import org.springframework.batch.item.ItemProcessor;  

public class CustomItemProcessor implements ItemProcessor<Tutorial, Tutorial> {  
   
   @Override 
   public Tutorial process(Tutorial item) throws Exception {  
      System.out.println("Processing..." + item); 
      return item; 
   } 
}