簡體   English   中英

如何使用不同的作業參數多次運行spring batch作業?

[英]How to run spring batch job multiple times with different job parameters?

我們創建了一個簡單的單步春季批處理作業。 有自定義實現的ItemReader和ItemWriter。 ItemReader從作業參數獲取初始數據。 作為獨立的Java進程運行時,批處理可以完美運行。 但是我們想要的是將批處理托管在某個服務器上。 因此,我們創建了REST服務來初始化批處理。 該服務調用作業URL並傳遞一些參數。 該參數作為作業參數傳遞給批處理。 當調用一個參數時,服務和作業運行良好。

但是,當我們多次調用該服務(出於測試目的兩次)時,該批處理的行為就很奇怪。 我們正在傳遞不同的作業參數。 但是,當執行開始進行第二次作業初始化時,ItemReader接收到的作業參數值與第一次執行時相同。 兩者的執行相互干擾,共享數據庫連接,干擾檢索到的數據等。

我們嘗試將可重啟參數設置為false,但沒有用。 我們還嘗試了以下解決方案:

我們可以創建同一java(spring)批處理作業的多個實例嗎?

上面的解決方案開始在JBoss中給出“嘗試鎖定中斷”錯誤。

在進一步調查中,我們發現ItemReader僅初始化一次。 這就是為什么它獲得相同的作業參數值並干擾先前的執行的原因。

編輯
以下是作業配置:

<bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />

<job id="jobid" restartable="false"> <step id="step1"> <tasklet> <chunk reader="reader" writer="writer" commit-interval="2"> </chunk> </tasklet> </step> </job>

以下是啟動作業的代碼段:

JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher");
Job job = (Job) context.getBean("jobid");

try {
    JobParameters param = new JobParametersBuilder().addString("key","value").toJobParameters();
    JobExecution execution = jobLauncher.run(job, param);
} catch (Exception e) {
    e.printStackTrace();
}

誰能提出一些解決方案? 我是否缺少該步驟的某些配置? 提前致謝。

我發現,如果我們靜態創建Context和JobLauncher對象,也就是說,如果這兩個對象只有一個實例,則上述操作可以正常進行。 這樣,我們可以多次啟動相同的作業,但是使用不同的參數。

Class MyClass{
private static ConfigurableApplicationContext context = null;
private static JobLauncher jobLauncher = null;

static{
    String[] springConfig = {BatchTokeniserConstants.SPRING_CONFIG_FILE_NAME};
        try {
            context = new ClassPathXmlApplicationContext(springConfig);
            jobLauncher = (JobLauncher) context.getBean("jobLauncher");
            BatchTokeniserUtils.loadSystemVaiables();
        } catch (BeansException e) {

        }
     }      
}

現在,可以使用jobLauncher在任意時間啟動任何作業。

我希望它可以幫助其他人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM