2010-02-24 52 views
12

Tôi đã thiết lập thành công dự án Spring Batch hướng dẫn. Tôi thực sự muốn biết nếu nó có thể làm cho nó đa luồng ở "cấp độ mùa xuân". Ý tưởng cơ bản về những gì tôi muốn là tạo một danh sách các nhiệm vụ hoặc các bước nhiệm vụ và cho phép chúng được chọn và làm việc bởi các luồng độc lập, lý tưởng nhất là trong một hồ bơi giới hạn số chủ đề 'n'.Làm thế nào để thiết lập đa luồng trong Spring Batch?

Điều này có khả thi không? Nếu vậy, làm thế nào? Ai đó có thể hướng dẫn tôi đến điểm đó từ nơi tôi đang ở?

Dự án đơn giản tôi có được từ hướng dẫn này here. Về cơ bản nó có các nhiệm vụ khác nhau để in ra một thông báo trên màn hình.

Dưới đây là tập tin của tôi hiện tại simpleJob.xml, chứa các chi tiết công việc:

<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> 

My appContext chứa đậu kho công việc (SimpleJobRepository), quản lý giao dịch (ResourceLessTransactionManager) và phóng công việc (SimpleJobLauncher). Tôi có thể cung cấp mã này nếu muốn, tôi chỉ không muốn bog xuống bài viết này với tấn XML.

Cảm ơn rất nhiều vì đã giúp đỡ!

Trả lời

10

Tạo một phân chia và bạn sẽ có thể sử dụng đa luồng giữa các nhánh khác nhau. Sử dụng TaskExecutor để xác định chính sách song song của bạn.

Xem Multi-threaded Step

Hãy chắc chắn để sử dụng phiên bản mới nhất của mùa xuân hàng loạt nếu bạn muốn sử dụng đa luồng và MapJobRepository (trước khi phiên bản mới nhất, JobRepository này đã không đề an toàn).

4

Hãy xem câu trả lời của Jean '. Một cách dễ dàng là tạo một bean của SimpleAsyncTaskExecutor và liên kết một tasklet để sử dụng bean này, như thế.

<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> 
Các vấn đề liên quan