我有一个小程序从FTP服务器获取文件并将其存储在临时文件夹中。我想将该文件夹的路径设置为批处理作业参数,以便其他步骤可以访问该文件。这是可能的,如果是这样,如何?我的JSR 352实现是spring批处理。Java批处理(JSR-352) - 如何从小批量设置作业参数?
编辑:我用您正在使用什么版本的春天Spring Batch的3.0里程碑3
我有一个小程序从FTP服务器获取文件并将其存储在临时文件夹中。我想将该文件夹的路径设置为批处理作业参数,以便其他步骤可以访问该文件。这是可能的,如果是这样,如何?我的JSR 352实现是spring批处理。Java批处理(JSR-352) - 如何从小批量设置作业参数?
编辑:我用您正在使用什么版本的春天Spring Batch的3.0里程碑3
感谢Michael Minella,我发现我可以在我的Batchlet中注入JobContext。
@Inject
private JobContext jobContext;
现在我可以使用此jobContext来设置属性。
jobContext.setTransientUserData(myData);
?
假设v3,您可以存储信息以传递到StepContext或JobExecutionContext中的其他作业步骤。您可以从传递到BatchletAdapter RepeatStatus方法的ChunkContext中检索StepContext。
或者你可以设置一个JVM参数,但是由于Spring提供了上面的方法,这感觉有点笨拙。
您可以将文件作为JSR-352的设施的工作参数的位置通过如下:
<step id="step1">
<batchlet ref="fooBatchlet">
<properties>
<property name="fileName" value="#{jobParameters['testParam']}"/>
</properties>
</batchlet>
</step>
上述假定您使用的是该batch.xml或Spring DI定义fooBatchlet 。否则,fooBatchlet将需要是完全限定的类名称。
谢谢你的回答。这确实将fileName注入到我的小批量中。但我的问题是另一种方式:在我的小程序中设置一个(作业/步骤)参数。这可能吗? – bortdc
啊......没有。参数是JSR-352中的一种方法。在JSR中共享这种类型的信息的方式是使用'JobContext'的transientData(假设你不需要它继续重启)。没有办法在作业级别存储JSR-352中的值,并在重新启动时使它们可用(在Spring Batch中,可以使用JobExecution的ExecutionContext来实现该功能)。 –
谢谢!注入'JobContext'工作!我将发布这个答案。 – bortdc
感谢您的回复。我正在使用Spring批处理3.0 M3。我会研究BatchletAdapter,但我更愿意只使用规范中的类。 – bortdc
这个答案不回答这个问题......它可以使用spec指定的配置来完成,如我在下面的答案中所示。 –