2010-02-24 7 views
12

मैंने सफलतापूर्वक ट्यूटोरियल स्प्रिंग बैच प्रोजेक्ट स्थापित किया है। मैं वास्तव में जानना चाहता हूं कि "स्प्रिंग लेवल" पर इसे बहु-थ्रेडेड बनाना संभव है या नहीं।स्प्रिंग बैच में बहु-थ्रेडिंग कैसे सेट करें?

जो मैं चाहता हूं उसका मूल विचार कार्य या कार्य चरणों की सूची बनाना है और उन्हें स्वतंत्र धागे द्वारा उठाया जाना चाहिए, आदर्श रूप से 'एन' थ्रेड के लिए सीमित पूल के बाहर।

क्या यह संभव है? यदि हां, तो कैसे? क्या कोई उस बिंदु पर मुझे मार्गदर्शन कर सकता है जहां से मैं वर्तमान में हूं?

मेरे पास सरल परियोजना इस ट्यूटोरियल here से है। इसमें मूल रूप से अलग-अलग कार्य होते हैं जो स्क्रीन पर एक संदेश प्रिंट करते हैं।

<import resource="applicationContext.xml"/> 

    <bean id="hello" class="helloworld.PrintTasklet"> 
     <property name="message" value="Hello"/> 
    </bean> 

    <bean id="space" class="helloworld.PrintTasklet"> 
     <property name="message" value=" "/> 
    </bean> 

    <bean id="world" class="helloworld.PrintTasklet"> 
     <property name="message" value="World!\n"/> 
    </bean> 

    <bean id="taskletStep" class="org.springframework.batch.core.step.tasklet.TaskletStep" > 
     <property name="jobRepository" ref="jobRepository"/> 
     <property name="transactionManager" ref="transactionManager"/> 
    </bean> 

    <bean id="simpleJob" class="org.springframework.batch.core.job.SimpleJob"> 
     <property name="name" value="simpleJob" /> 
     <property name="steps"> 
      <list> 
       <bean parent="taskletStep"> 
        <property name="tasklet" ref="hello"/> 
       </bean> 
       <bean parent="taskletStep"> 
        <property name="tasklet" ref="space"/> 
       </bean> 
       <bean parent="taskletStep"> 
        <property name="tasklet" ref="world"/> 
       </bean> 
      </list> 
     </property> 
     <property name="jobRepository" ref="jobRepository"/> 
    </bean> 

मेरे appContext काम भंडार सेम (SimpleJobRepository), लेन-देन प्रबंधक (ResourceLessTransactionManager) और नौकरी लांचर (SimpleJobLauncher) शामिल हैं:

यहाँ मेरे वर्तमान simpleJob.xml फ़ाइल है, जो नौकरी विवरण शामिल हैं। अगर मैं वांछित भी हो तो मैं यह कोड प्रदान कर सकता हूं, मैं इस पोस्ट को बहुत सारे एक्सएमएल के साथ छेड़छाड़ नहीं करना चाहता था।

किसी भी मदद के लिए बहुत बहुत धन्यवाद!

उत्तर

10

एक स्प्लिट बनाएं और आप विभिन्न शाखाओं के बीच मल्टीथ्रेडिंग का उपयोग करने में सक्षम होंगे। अपनी समांतरता नीति को परिभाषित करने के लिए एक कार्यवाहीकर्ता का उपयोग करें।

देखें Multi-threaded Step

वसंत बैच के नवीनतम संस्करण का उपयोग करने के multithreading और MapJobRepository (नवीनतम संस्करण से पहले, इस JobRepository सुरक्षित थ्रेड नहीं था) उपयोग करना चाहते हैं सुनिश्चित करें।

4

जीन उत्तरों पर एक नज़र डालें। एक आसान तरीका SimpleAsyncTaskExecutor का एक बीन बना रहा है और इस बीन का उपयोग करने के लिए एक टास्कलेट को संबद्ध करता है।

<bean id="simpleTaskExecutor" 
    class="org.springframework.core.task.SimpleAsyncTaskExecutor"> 
    <property name="concurrencyLimit" value="10"/> 
</bean> 

<batch:job id="jobTest"> 
    <batch:step id="step1"> 
    <!-- throttle-limit default is 4. Increase this to ensure that a thread pool is fully utilized --> 
     <batch:tasklet task-executor="simpleTaskExecutor" throttle-limit="20"> 
      <batch:chunk /> 
     </batch:tasklet> 
    </batch:step> 
</batch:job> 
संबंधित मुद्दे