2011-10-25 9 views
8

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

मुझे एक आवश्यकता है जहां एक तालिका (इनपुट) से भू समन्वय पढ़ा जाता है, पीओआई को समन्वय से जुड़े उत्पन्न करने के लिए संसाधित किया जाता है। तो एक भू समन्वय के परिणामस्वरूप एक या अधिक पीओआई की आवश्यकता होगी जिसे किसी अन्य तालिका (आउटपुट) में डालने की आवश्यकता है।

मैं वर्तमान में एक आइटम/रिकॉर्ड पढ़ने और एक आइटम/रिकॉर्ड लिखने के लिए एक जेडीबीसी कर्सोरइटम रीडर और जेडीबीसी बैचइटमम्राइटर का उपयोग कर रहा हूं। एक आइटमप्रोसेसर भी है जो पीओआई को भू-समन्वय देने के लिए उत्पन्न करता है।

क्या कोई कस्टम JdbcBatchItemWriter मुझे यह प्राप्त करने में मदद करता है?

कोई विचार? TIA।

उत्तर

4

अगर आप सिर्फ विभिन्न लेखकों (डुप्लिकेट उत्पादन पढ़ें) आप मौजूदा CompositeItemWriter

उपयोग कर सकते हैं, लेकिन मैं यकीन नहीं है अगर आपके प्रोसेसर विभिन्न प्रकार की वस्तुओं के उत्पादन करेगा या यदि आप प्रसार करने के लिए चाहते करने के लिए आइटम का प्रसार करना चाहते हैं कई लेखकों को एक जटिल आइटम प्रकार की सामग्री, उन मामलों के लिए आप एक से थोड़ा बदला गया वर्शन एक multiline-record-writer प्रश्न के लिए करीब उपयोग कर सकते हैं

public class MultiOutputItemWriter implements ItemWriter<Object> { 

private JdbcBatchItemWriter<ClassFoo> delegateFoo; 
private JdbcBatchItemWriter<ClassBar> delegateBar; 

public void write(List<? extends Object> items) throws Exception { 
     // if you have different types of items 
     // check Object Class 
     // add to new List<Classfoo> 
     // call delegate e.g. delegateFoo.write(List with ClassFoo); 
     // 
     // or if you have complex objects 
     // same procedure as above, but with 
     // add to new List<Classfoo> with item.getClassFoo 
} 
} 

अगर आप FlatFileItemWriter उपयोग करते हैं, register the delegates as ItemStreams को भूल नहीं है (ताकि वसंत बैच खुल जाएगा/उन्हें आपके लिए)

+0

धन्यवाद माइकल:

यहाँ कैसे मैंने पढ़ा हर पंक्ति/संसाधित के लिए कई राईट को संभालने के लिए लेखक बढ़ाया है। मैंने जवाबों की तलाश जारी रखी और एक ही समाधान में कम से कम पहुंचे। मेरा आइटम प्रोसेसर वर्तमान में एक आइटम उत्पन्न कर रहा है लेकिन मैं वस्तुओं की एक सूची वापस करने के लिए इसे संशोधित कर सकता हूं। मैं एकल लेखक का उपयोग करने और एक ही प्रकार के एक से अधिक वस्तुओं को एक टेबल में लिखने की योजना बना रहा हूं। मैं इसे एक शॉट दूंगा और देख सकता हूं कि मेरे लिए काम करता है या नहीं। – user977505

+0

यह मेरे लिए काम किया। मैंने एक प्रोसेसर का उपयोग किया जो उपरोक्त सुझावों के अनुसार वस्तुओं की एक सूची और एक लेखक को वापस कर रहा था। हालांकि मैं डीबी में आइटम डालने के लिए एक सादा jdbc टेम्पलेट w/बैच अद्यतन का उपयोग किया। महत्वपूर्ण हिस्सा 'सूची <था? ऑब्जेक्ट> आइटम 'बढ़ाता है। मैं इस नोटेशन से परिचित नहीं था और सूची से वस्तुओं को पढ़ने की कोशिश कर रहा था। मदद के लिए एक बार फिर से धन्यवाद। – user977505

8

क्या तुम सच में करने के लिए एक Splitter पैटर्न कहा जाता है देख रहे हैं:

enter image description here

यहाँ है कि यह कैसे Spring Integration में परिभाषित किया गया है:

एक स्प्लिटर संदेश Endpoint जिसका जिम्मेदारी के लिए है का एक प्रकार है अपने इनपुट चैनल से एक संदेश स्वीकार करें, उस संदेश को कई संदेशों में विभाजित करें, और फिर उनमें से प्रत्येक को अपने आउटपुट चैनल में भेजें। यह आमतौर पर उप-विभाजित पेलोड वाले संदेशों के समूह में "समग्र" पेलोड ऑब्जेक्ट को विभाजित करने के लिए उपयोग किया जाता है।

विन्यास अत्यंत सरल है:

<channel id="inputChannel"/> 

<splitter id="splitter" 
    ref="splitterBean" 
    method="split" 
    input-channel="inputChannel" 
    output-channel="outputChannel" /> 

<channel id="outputChannel"/> 

<beans:bean id="splitterBean" class="sample.PojoSplitter"/> 

या आप व्याख्या का उपयोग कर सकते हैं:

@Splitter 
List<LineItem> extractItems(Order order) { 
    return order.getItems() 
} 

आप निश्चित रूप से लिख सकते हैं अपने खुद के JdbcBatchItemWriter अगर यह आसान लगता है। हालांकि वसंत एकीकरण पहले से ही आपके लिए यह करता है।

आप Spring Integration JDBC Support =>jdbc:inbound-channel-adapter/jdbc:outbound-channel-adapter और उपरोक्त स्प्लिटर का उपयोग कर सकते हैं जो आप चाहते हैं और प्राप्त करने के लिए .. सादगी।

+0

सिर्फ उत्सुक है, वसंत एकीकरण के साथ भी काम को पुनरारंभ करता है? या दूसरे शब्दों में, वसंत एकीकरण सिर्फ एक पतली प्लग करने योग्य मॉड्यूल है? –

+0

आप निश्चित रूप से फिर से शुरू कर सकते हैं पुनरारंभ कर सकते हैं (यह एक दार्शनिक चर्चा है, क्योंकि पुनर्नवीनीकरण क्लीनर है :)। लेकिन यदि आप इसे स्प्रिंग बैच (पतली प्लग करने योग्य मॉड्यूल) के भीतर से उपयोग करना चाहते हैं, तो आप कर सकते हैं। यद्यपि @ user977505 स्थिति के लिए, संभवतः कुछ एसबी घटकों (या नहीं) के साथ वसंत एकीकरण अकेले ठीक होगा। जवाब देने के लिए – tolitius

+0

धन्यवाद। मैं इसे एक शॉट दूंगा और धागे को अद्यतन करूंगा। – user977505

0

मैंने राइटर क्लास (मेरे मामले में HibernateItemWriter) को विस्तारित करके ऐसा किया। मुझे लगता है कि एक जवाब वर्णन करता है कि 'स्प्लिटर' का उपयोग कैसे करें। अगर किसी के पास एक कामकाजी उदाहरण है कि वसंत-बूट स्टार्टर-पैरेंट का उपयोग करके पर्यावरण में कैसे काम कर सकता है, तो मुझे इसे देखना अच्छा लगेगा। मैं जो कर रहा हूं (एक रिकॉर्ड से एक सूची बनाना) यह बहुत आसान होगा अगर स्प्रिंग ने एक लिखित विधि प्रदान की जो लिस्ट की सूची प्रदान करती है।Spring-Batch Multi-line record Item Writer with variable number of lines per record

संबंधित मुद्दे