在 Java 批次中从 reader 获取属性

Get Properties from reader in Java Batch

我在 WildFly 上有一个 Java 批处理 (JSR-352) 应用程序 运行。该应用程序正在公开 rest-api 以触发作业执行。我想向 Reader Class 提供一些来自 HTTP REST 请求的值。实现这个的最佳方法是什么?

REST API 工作开始的地方:

@PUT
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response handleFileReady(MyNotification notification) {
   final Properties jobParams = new Properties();
   jobParams.setProperty("filename", notification.getFileName());

   BatchRuntime.getJobOperator().start("filetransfer", jobParams);
   return Response.status(Response.Status.NO_CONTENT).build();
}

Reader 我想从以下位置读取值:

public class MyJobReader extends AbstractItemReader {

    @Override
    public Integer readItem() throws Exception {
       // Get Values here
       ...

此外,目前我正在通过读取通知对象来设置属性中的字符串值,有没有更好的方法来提供整个对象?

通过注入 JobContext,我现在可以获得执行 ID:

public class MyJobReader extends AbstractItemReader {

    @Inject
    private JobContext jobContext;

    @Override
    public Integer readItem() throws Exception {

        Properties pros = BatchRuntime.getJobOperator().getParameters(jobContext.getExecutionId());

您可以在您的 http 请求中将它们作为查询字符串传递,然后您的 REST 资源 class 将它们作为批处理作业参数传递。在您的作业 xml 文件中,您将作业参数作为 reader 的批处理属性传递给 reader。您的 reader class 然后将这些批处理属性作为 class 字段注入。

这是在 jberet-rest 中的做法。