从spring batch admin访问远程spring批处理作业

我是 Spring 季批次新手 . 我想在服务器a上运行spring批处理作业,并希望使用spring batch admin从服务器b启动那些作业 . 这可能吗?我搜索了以下两种方式:

1.JMX方式:我可以将spring batch beans转换成mbeans但是我无法从spring batch admin中读取它们 . 你告诉我们如何从spring batch admin读取mbeans并启动它们?

2.common存储库:我认为如果我对spring批处理和spring批处理管理员使用相同的db存储库,那么我可以从spring batch admin(从服务器b)启动远程作业 . 但是在spring批处理管理器的作业xml文件中应该是什么是tasklet的类路径?

你可以帮助上述或告诉我是否存在任何新方法?

回答(3)

2 years ago

我们最终使用mq通信实现了一个框架来处理这个问题 . 每个“批处理节点”都会注册自己以及任何“批处理类”参数,例如“nodeType = A”或“jobSizeiCanHandle = BIG”(这些都是虚构的,但您明白了这一点) . 客户端控制台读取此信息并通过MQ查询节点以获取作业列表 . 然后,它通过基于基本文本的协议(属性文件格式)提交带有参数的作业请求 .

command=START_JOB
job=JobABC
param1=x
param2=y

其中一个批处理节点将获取消息并启动作业,它将以相同的方式返回成功/失败状态,并具有相同的相关ID . 所以客户端可以显示对用户的响应 .

这允许我们做你正在谈论的事情并通过外部调度程序(Control-M)激发工作 . 上面提到的'nodeType = A'允许我们查询各个节点(节点监听'nodeType = A或nodeType = *' . 这样,如果需要,命令可以'命令'到特定节点 .

请记住,这是我们自己的控制台,而不是 spring 批处理管理控制台 . 所以也许这对你没有帮助,但是 Build 一个简单的控制台并不需要花那么长时间使用 spring 批量API(4或5个asps) .

批处理节点也可以启动简单的服务,如HTTP REST服务或“任何”,但我们大量使用MQ,我喜欢不必预先注册节点的想法(框架代码不知道/关心它在HTTP容器中,因此无法轻松注册 endpoints ) . 使用MQ,通道已预先配置,所有应用程序都只是“使用它”,因此它看起来更容易 .

祝好运 .

2 years ago

我想做同样的事情 . 但似乎为了直接从Spring批处理管理员启动作业,所有作业资源都必须添加到spring批处理Web应用程序中 . 可以尝试使用spring MVC提交宁静的工作

2 years ago

@chau

一种使用Spring批处理管理的方法,但“发现”和“调用”远程作业是为org.springframework.batch.admin.service.JobService和org.springframework.batch.core.launch.JobOperator提供自己的实现 . 可以从远程作业注册表/存储库查询和调用作业 .

您可以在以下位置找到JobService和JMX启用的作业管理员的自定义实现:https://github.com/regunathb/Trooper/tree/master/batch-core as:org.trpr.platform.batch.impl.spring.admin.SimpleJobService和org.trpr.platform.batch.impl.spring.jmx.JobAdministrator

使用这些bean的Spring bean XML在这里:https://github.com/regunathb/Trooper/blob/master/batch-core/src/main/resources/packaged/common-batch-config.xml