使用jobParameters初始化要在Spring Init方法中使用的属性

时间:2017-06-14 09:18:04

标签: java spring spring-batch

我想在我的阅读器(文件路径)中初始化一个属性,通过使用CommandLineJobRunner执行我的作业将其值传递给jobParameters,<bean id = "reader" class = "com.xyz.reporting.myReader" scope = "step" init-method = "init">    <property name = "resource" value = "#{jobExecutionContext ['input.fileName']}" /> </ bean> 将文件的路径作为参数。

这是我的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"

这是命令:

 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方法中打开文件(在bean配置中定义)

Month    Current            30 Days       30 - 60 Days 
Apr-13   1375159316       34511076         6423821 
May-13   71398540         5674629          4775687 
Jun-13   1314130060       27364660         9328588 

这样做是不错的做法?调用init方法时是否会初始化resource属性,即jobParameters是否已经初始化了?

在进一步说明之前,这段代码是否可以使用Junit进行测试?

1 个答案:

答案 0 :(得分:0)

回答你的问题:

将路径注入文件是否是一个好习惯 - 是的。您不需要使用init方法进行注射。你可以让Spring通过@Value注释注入它,如下所示:

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

调用init方法时是否会初始化资源属性,即jobParameters是否已经初始化? - 假设您使用我上面描述的方法,您不需要使用init方法(Spring会为您处理所有这些)。

在进一步推进之前,这段代码是否可以使用Junit进行测试? - 是的,所有这些都是可测试的。我们有单元测试,证明在Github上的项目(https://github.com/spring-projects/spring-batch)。