1. 程式人生 > >SpringBatch配置多執行緒step

SpringBatch配置多執行緒step

SpringBatch批處理框架預設使用單執行緒完成任務的執行,但是他提供了對執行緒池的支援。使用tasklet的task-executor屬性可以很容易的將普通的step轉成多執行緒的step。

task-executor:任務執行處理器,定義後採用多執行緒執行任務,需要考慮執行緒安全問題。 throttle-limit:最大使用執行緒池數目。

如果我們希望示例中的 billingStep 以併發方式執行,且併發任務數為 5,那麼只需要做如下配置即可,見清單:

<stepid="billingStep"next="payStep"><tasklettask-executor
="taskExecutor"throttle-limit="5"><chunkreader="userDbReader"processor="billingProcessor"writer="billDbWriter"commit-interval="5"chunk-completion-policy=""></chunk></tasklet></step><beans:beanid="taskExecutor"class="org.springframework.core.task.SimpleAsyncTaskExecutor">
</beans:bean>

Spring Core 為我們提供了多種執行器實現(包括多種非同步執行器),我們可以根據實際情況靈活選擇使用。

類名 描述 是否非同步
SyncTaskExecutor 簡單同步執行器
ThrottledTaskExecutor 該執行器為其他任意執行器的裝飾類,並完成提供執行次數限制的功能 視被裝飾的執行器而定
SimpleAsyncTaskExecutor 簡單非同步執行器,提供了一種最基本的非同步執行實現
WorkManagerTaskExecutor 該類作為通過 JCA 規範進行任務執行的實現,其包含 JBossWorkManagerTaskExecutor 和 GlassFishWorkManagerTaskExecutor 兩個子類
ThreadPoolTaskExecutor 執行緒池任務執行器

在多執行緒step中為了保證程式碼處理的正確性,要求所有在多執行緒step中處理的物件和操作必須都是執行緒安全的。但是SpringBatch框架提供的大部分的ItemReader、ItemWriter都不是執行緒安全的。所以需要自己保證多執行緒處理時候的執行緒安全。

那麼,如何保證step的執行緒安全呢?

1.對reader的read方法使用synchronized關鍵字。

這種方式並不支援重啟操作。當執行失敗的時候並沒有儲存當前的狀態資料導致無法知道哪些資料已經讀取,哪些資料未讀取。

多執行緒step提供了多個執行緒執行一個step的能力,但這種場景在實際業務中是用的並不是非常多。更多的是job中不同的step沒有先後順序,可以在執行期間並行的執行。SpringBatch提供了並行step的能力。可以通過split元素來定義並行的作業流。

相關推薦

SpringBatch配置執行step

SpringBatch批處理框架預設使用單執行緒完成任務的執行,但是他提供了對執行緒池的支援。使用tasklet的task-executor屬性可以很容易的將普通的step轉成多執行緒的step。 task-executor:任務執行處理器,定義後採用多執行緒執行任務,需

SpringBoot配置執行

在SpringBoot專案中配置和使用多執行緒非常簡單,步驟如下. 1.多執行緒配置: /** * 執行緒池配置 * * @author dongchuan */ @Configuration @EnableAsync public class AsyncTas

Mysql 5.7 從節點配置執行主從複製

Mysql 5.7 對主從複製增加了一種型別,共有兩種型別,如下:DATABASE 基於庫的並行複製 , 每個資料庫對應一個複製執行緒LOGICAL_CLOCK 基於組提交的並行複製方式,同一個資料庫下可以有多個執行緒下面的步驟,在從節點上進行配置。檢視當前配置在開始配置之前,我們先看一下當前配置下的主從複製

Java執行-----執行池的使用,原理以及舉例實現(三)(四):使用樣例及如何配置執行池大小

三.使用示例   前面我們討論了關於執行緒池的實現原理,這一節我們來看一下它的具體使用: public class Test { public static void main(String[] args) { ThreadPoolExe

從零開始學執行之自定義配置執行池(七)

等待其他資源,可能會產生執行緒飢餓死鎖 線上程池中如果一個任務依賴於其它任務的執行,就可能產生死鎖.在一個單執行緒化的Executor中,提交兩個任務,任務二滯留在工作佇列中等待第一個任務完成,但是第一個任務不會完成,因為它在等待第二個任務的完成(需要第二個任務執行的結果進行運算),這就會發生死鎖. 在一個大

ThreadPoolTaskExecutor執行使用,及執行配置

1.配置 ThreadPoolTaskExecutor bean <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"

017.執行-執行池原理解析以及合理配置

public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveT

執行配置

@Configuration @EnableAsync public class AsyncTaskConfig implements AsyncConfigurer { @Override @Bean public Executor getAsyncExecutor() {

springboot動態配置定時任務2種方式,整合Quartz執行併發執行個定時任務配置

我的專案是採用的idea+gradle+springboot專案構建,下面是springboot實現定時任務所需要的jar包 //定時任務使用 compile group: 'org.quartz-scheduler', name: 'quartz', version:

SpringBoot 定時執行配置執行執行

Spring Boot 的定時任務: 第一種:把引數配置到.properties檔案中: 程式碼: package com.accord.task;   import java.text.SimpleDateFormat; import java.util.Date;

cmake配置基本工程和執行

什麼是cmake? 大家都知道自linux上寫的c/c++程式,在編譯連結單個或者多個檔案時為了方便,我們都會寫一個MakeFile檔案,然後在命令列執行make命令。cmake就是生成MakeFile檔案的工具。 這是cmake的下載地址https://c

【C++】VS2013配置C/C++執行使用環境

在用C語言做影象處理的過程中,經常會使用到多執行緒操作,對於沒有使用過的朋友們,或許還要折騰半天,今天這裡簡單總結一下配置方法: 1,下載pthread 的windows安裝包:http://sourceware.org/pthreads-win32/  至於版本,

windows下PHP Pthreads執行安裝與配置

一、phpinfo()檢視已安裝php版本是否執行緒安全及編譯器版本 ThreadSafety項enabled表示執行緒安全 Compiler項表示編譯器 二、根據以上資訊及系統版本選擇pthreads版本 pthreads下載地址:http://windows.php.n

spring reactor執行配置

    最近工作中用到一個非常好用的框架spring reactor,可以幫助我們新開一個非同步的執行緒來處理一些比如記錄日誌的功能,這樣就能節約後臺相應的時間,之前在網上也沒有找到完全能用的列子,這裡記錄一下,方便以後用,配置也非常的簡單: 1:引入jar包,這裡使用

linux下用eclipse編譯c++的pthread執行配置

問題:eclipse使用pthread.h遇到“pthread_create”未定義的問題。 解決方法: a.需要在編譯時新增-lpthread引數 $ g++ XXXXX.cpp -lp

PHP編譯配置安裝pthread執行 全過程

環境和版本:系統:Centos7.2mysql:mariadb-10pthread v3 版本開始只支援cli模式(命令列)執行指令碼,正常啟動都會失敗,pthread阻止的。以下是作者說明:SAPI Support pthreads v3 is restricted to

Springboot 2.0.* 及低版本定時任務@Scheduled執行配置

1. 首先在springboot啟動類上新增 @EnableScheduling 註解。 import org.spr

Windbg除錯----執行控制除錯

在除錯程式的時候,可能經常會有這樣的需求,讓一個執行緒在特定的時候才讓其開始執行或者暫停執行。比如複雜的多執行緒導致死鎖的問題,又或者多執行緒中的Race Condition 導致程式執行異常等。 很多時候,我們可以藉助編寫除錯程式碼來達到多執行緒的除錯,可是有些情況下除錯的執行粒度是指

Java執行實現電影院售票案例

某電影院目前正在上映賀歲大片,共有100張票,而它有3個售票視窗,請設計一個程式模擬該電影院售票。 定義Sell類實現Runnable介面,很好的解決了單繼承共享資源問題 public class Sell implements Runnable { // 定義100張票,三個售票

Objective-C高階程式設計:iOS與OS X執行和記憶體管理

這篇文章主要給大家講解一下GCD的平時不太常用的API,以及文末會貼出GCD定時器的一個小例子。 需要學習的朋友可以通過網盤免費下載pdf版 (先點選普通下載-----再選擇普通使用者就能免費下載了)http://putpan.com/fs/cy1i1beebn7s0h4u9/ 1.G