我是春季批次新手。我想在服务器a上运行spring批处理作业,并希望使用spring batch admin从服务器b启动那些作业。这可能吗?我搜索了以下两种方式:
1.JMX方式:我可以将spring batch beans转换为mbeans但我无法从spring批处理admin中读取它们。你告诉如何从spring批处理管理器中读取mbeans并启动它们?2.common repository:我想如果我对spring批处理和spring批处理管理员使用相同的db存储库,那么我可以从spring batch admin(从服务器b)启动远程作业。但是在spring批处理的作业xml文件中admin什么应该是tasklet的类路径?
你可以帮助上述或告诉我是否存在任何新的方式?
答案 0 :(得分:1)
我们最终使用mq通信实现了一个框架来处理这个问题。每个“批处理节点”都会注册自己以及任何“批处理类”参数,例如“nodeType = A”或“jobSizeiCanHandle = BIG”(这些都是虚构的,但您明白了这一点)。客户端控制台读取此信息并通过MQ查询节点以获取作业列表。然后,它通过基于基本文本的协议(属性文件格式)提交带有参数的作业请求。
command=START_JOB
job=JobABC
param1=x
param2=y
其中一个批处理节点将接收消息并启动作业,它将以相同的方式返回成功/失败状态,并且具有相同的相关ID。所以客户端可以显示对用户的响应。
这使我们能够做你正在谈论的事情并通过外部调度程序(Control-M)激发工作。上面提到的'nodeType = A'允许我们查询单个节点(节点监听'nodeType = A或nodeType = *'。这样,如果有必要,命令可以'定位'到特定节点。
请记住,这是我们自己的控制台,而不是Spring批量管理控制台。所以也许这对你没有帮助,但是建立一个简单的控制台并不需要花那么长时间使用弹簧批量API(4或5个asps)。
批处理节点也可以启动简单的服务,如HTTP REST服务或“任何”,但我们大量使用MQ,我喜欢不必预先注册节点的想法(框架代码不知道/关心它在哪里)一个HTTP容器,因此无法轻松注册端点)。使用MQ,通道已预先配置,所有应用程序只是“使用它”,因此看起来更容易。
祝你好运。答案 1 :(得分:0)
我正在尝试做同样的事情。但似乎为了直接从Spring批处理管理员启动作业,所有作业资源都必须添加到spring批处理Web应用程序中。可以尝试使用spring MVC提交宁静的工作提交
答案 2 :(得分:0)
@chau
使用Spring批处理管理的一种方法是,但“发现”和“调用”远程作业是为org.springframework.batch.admin.service.JobService和org.springframework.batch.core提供自己的实现。 launch.JobOperator,可以从远程作业注册表/存储库查询和调用作业。
您可以在https://github.com/regunathb/Trooper/tree/master/batch-core中找到JobService和JMX启用的作业管理员的自定义实现: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