1

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

1.JMX方式:我可以将spring batch bean转换为mbeans,但我不能从spring batch admin中读取它们。你能告诉我如何从spring batch admin中读取mbeans并启动它们吗?

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

您能在上面提供帮助或告诉我是否存在任何新方法吗?

4

3 回答 3

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 Batch 管理控制台。所以也许这对您没有帮助,但是使用 spring 批处理 API(4 或 5 个 asps)构建一个简单的控制台并不需要那么长时间。

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

祝你好运。

于 2012-02-29T22:35:48.777 回答
0

我正在尝试做同样的事情。但似乎为了直接从 Spring Batch Admin 启动作业,所有作业资源都必须添加到 Spring Batch Web 应用程序中。可以尝试使用 spring MVC 提交宁静的作业

于 2012-02-27T19:44:39.083 回答
0

@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:org.trpr.platform.batch.impl.spring.admin.SimpleJobService和 org.trpr.platform.batch.impl.spring.jmx.JobAdministrator

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

于 2012-12-17T13:20:39.810 回答