2017-06-14 32 views
0

我想通過使用CommandLineJobRunner作爲參數執行我的作業來初始化我的閱讀器中的屬性(文件的路徑),該屬性的值將被傳遞到jobParameters中文件的路徑。使用jobParameters初始化要在Spring Init方法中使用的屬性

這裏是我的bean的配置:

<bean id = "reader" class = "com.xyz.reporting.myReader" scope = "step" init-method = "init"> 
   <property name = "resource" value = "#{jobExecutionContext ['input.fileName']}" /> 
</ bean> 

下面是一個命令:

java -cp "target/dependency-jars/*: target/my-project.jar" org.springframework.batch.core.launch.support.CommandLineJobRunner src/main/resources/job.xml interceptorJob input.filename = "filePath" 

在我的讀者我想開在init方法的文件(在bean配置中定義)

public final class MyReader implements ItemReader<Message> 
    { 
    ... 
    /** 
    * input filename 
    */ 
    private String resource; 

    public void setResource(String resource_p) 
     { 
     resource = resource_p; 
     } 

      public void init() throws Exception 
      { 

        File file = new File (resource); 
        BufferedReader br = new BufferedReader (new FileReader (file)); 
      } 
    ... 
    } 

這樣做會是一個很好的做法嗎?在調用init方法時是否會初始化resource屬性,即jobParameters是否已經被初始化?

在繼續之前,這段代碼是否可以通過Junit測試?

+0

使用'#{jobParameters}' –

回答

0

回答您的問題:

難道是注入到該文件的路徑一個很好的做法 -是。您不需要使用init方法來進行注入。你可以讓Spring通過@Value註解注入它象下面這樣:

@Value("#{jobParameters['input.fileName']}") 
private Resource resource; 

將資源屬性被初始化時,init方法被調用,即jobParameters就已經被初始化? -假設你使用上面描述的方法,你不需要使用init方法(Spring爲你處理所有的方法)。

在繼續之前,這段代碼是否可以通過Junit測試? -是的,所有這些都是可測試的。我們有單元測試,證明在Github上的項目(https://github.com/spring-projects/spring-batch)。

相關問題