2015-10-22 36 views
1

我的spring批處理作業有兩個job params filePath & fileName。要求是將此filePath + fileName作爲屬性值傳遞給其他自定義Bean。但是,我不能「步進」這個bean來訪問這些參數。因此,我需要一種方法來從(非步驟)正常bean訪問這些作業參數。請參閱以下代碼::如何將JobParams傳遞給xml中的其他bean?

<bean id="cardDownloadFileTemplate" 
    class="org.springframework.integration.file.remote.RemoteFileTemplate"> 
    <constructor-arg ref="sftpSessionFactory" /> 
    <property name="fileNameExpression"> 
     <bean class="org.springframework.expression.common.LiteralExpression"> 
      <constructor-arg 
       value="#{jobParameters['filePath']}#{jobParameters['fileName']}}" /> 
     </bean> 
    </property> 
    <property name="charset" value="${fserver.charset}" /> 
</bean> 
+0

我不能步驟範圍,因爲它的錯誤出來說沒有這樣的構造&LiteralExpression不能以stepScope爲目標。 – skpraveen

+0

你是否試圖將fileNameExpression Bean作爲第一個公民,通過將其作爲具有id的「真正」bean拉出來?現在它是一個匿名內部的豆 –

回答

1

它不能完成;對於正常範圍的bean(單例,原型),在啓動作業之前,bean會根據上下文進行初始化;沒有可用的jobParameters變量。

0

可以將普通bean設置爲步驟監聽器,然後實現可從步驟執行中提取JobParameters的@BeforeStep方法。

在這種情況下,您正在提取的參數的值在bean初始化時將不可用,但只能在該步驟開始運行之前提供。

與從當前範圍 beforeStep(StepExecution stepExecution)的StepExecution stepExecution初始化收聽者的狀態 - > getJobParameters()

+0

到那時,LiteralExpression已經初始化了,我需要的值(JobParams)是一個構造函數參數。所以,即使我在listener中得到jobParams,我如何將它傳遞給fileNameExpression類的構造函數? – skpraveen

+0

對,在上述情況下,除非您可以移動代碼以在BeforeStep或BeforeJob中創建LiteralExpression,否則無法執行此操作 –

相關問題