2014-03-26 41 views
1

我有一个小程序从FTP服务器获取文件并将其存储在临时文件夹中。我想将该文件夹的路径设置为批处理作业参数,以便其他步骤可以访问该文件。这是可能的,如果是这样,如何?我的JSR 352实现是spring批处理。Java批处理(JSR-352) - 如何从小批量设置作业参数?

编辑:我用您正在使用什么版本的春天Spring Batch的3.0里程碑3

回答

1

感谢Michael Minella,我发现我可以在我的Batchlet中注入JobContext。

@Inject 
private JobContext jobContext; 

现在我可以使用此jobContext来设置属性。

jobContext.setTransientUserData(myData);  
1

假设v3,您可以存储信息以传递到StepContext或JobExecutionContext中的其他作业步骤。您可以从传递到BatchletAdapter RepeatStatus方法的ChunkContext中检索StepContext。

或者你可以设置一个JVM参数,但是由于Spring提供了上面的方法,这感觉有点笨拙。

+0

感谢您的回复。我正在使用Spring批处理3.0 M3。我会研究BatchletAdapter,但我更愿意只使用规范中的类。 – bortdc

+0

这个答案不回答这个问题......它可以使用spec指定的配置来完成,如我在下面的答案中所示。 –

2

您可以将文件作为JSR-352的设施的工作参数的位置通过如下:

<step id="step1"> 
    <batchlet ref="fooBatchlet"> 
     <properties> 
      <property name="fileName" value="#{jobParameters['testParam']}"/> 
     </properties> 
    </batchlet> 
</step> 

上述假定您使用的是该batch.xml或Spring DI定义fooBatchlet 。否则,fooBatchlet将需要是完全限定的类名称。

+0

谢谢你的回答。这确实将fileName注入到我的小批量中。但我的问题是另一种方式:在我的小程序中设置一个(作业/步骤)参数。这可能吗? – bortdc

+1

啊......没有。参数是JSR-352中的一种方法。在JSR中共享这种类型的信息的方式是使用'JobContext'的transientData(假设你不需要它继续重启)。没有办法在作业级别存储JSR-352中的值,并在重新启动时使它们可用(在Spring Batch中,可以使用JobExecution的ExecutionContext来实现该功能)。 –

+0

谢谢!注入'JobContext'工作!我将发布这个答案。 – bortdc