首页 > 解决方案 > 将 Spring 事件侦听器添加到 Camunda BPM Run Docker

问题描述

我想做一些由 Camunda 流程实例状态更改触发的工作,因此为 Camunda 编写了一个 Spring 注释驱动的事件侦听器。

我已经将它打包成一个 JAR 文件:code 并且pom.xml在 Gist here上。

我编写了一个 Dockerfile,它扩展camunda/camunda-bpm-platform:run-7.14.0并将生成的 JAR 插入/camunda/configuration/userlib.

这绝对是在 Spring 引导加载程序路径中,根据ps

10 camunda   0:31 java -Dloader.path=/camunda/internal/webapps/,/camunda/internal/rest/,/camunda/configuration/userlib/,/camunda/configuration/keystore/ -Dcamunda.deploymentDir=/camunda/configuration/resources -jar /camunda/internal/camunda-bpm-run-core.jar --spring.config.location=file:/camunda/configuration/default.yml

检查日志,Camunda 肯定会启动 Spring 事件:

o.c.b.s.b.s.event.EventPublisherPlugin   : EVENTING-001: Initialized Camunda Spring Boot Eventing Engine Plugin.
o.c.b.s.b.s.event.EventPublisherPlugin   : EVENTING-003: Task events will be published as Spring Events.
o.c.b.s.b.s.event.EventPublisherPlugin   : EVENTING-005: Execution events will be published as Spring Events.
o.c.b.s.b.s.event.EventPublisherPlugin   : EVENTING-007: History events will be published as Spring events.

但我没有看到我的任何日志消息。

这让我怀疑仅仅在加载器上放置一个 JAR 并不足以让 Spring Boot 找到侦听器 - 但我不知道我还缺少什么。

任何帮助将非常感激。谢谢!

标签: javaspring-bootcamunda

解决方案


好的,我意识到我在这里做错了。我错误地假设类路径上的任何 JAR 文件都会自动初始化它们的类,这反过来意味着 Spring 会注意到@Componentand@EventListener注释,然后......做一些魔术来添加监听器。这不是真的。

我现在明白正确的做法是使用 Camunda Initializr 构建一个包含我的侦听器的全新Spring Boot 应用程序,然后围绕它滚动一个 Docker。所以这就是我现在前进的道路。


推荐阅读