带有Camunda的Spring-如果通过bean配置进程,则重启后不会更新DB

问题描述 投票:0回答:1

我有一个Camunda进程,该进程每15分钟定期启动一次,这是使用CRON表达式配置的。我使用默认配置以默认data source configuration连接到MariaDB。

Camunda进程myProcess.bpmn计时器定义:

  • 过程是startebleexecutable
  • 计时器定义类型为Cycle,计时器定义为0 0 0 ? * * *

基于我观察到的The Job Executor documentation ,该值存储在ACT_RU_JOB列的REPEAT_表中。

SELECT ID_, REPEAT_ from act_ru_job;

--------------------------------------------------------
| ID_                                  | REPEAT_       |
--------------------------------------------------------
| 0d1f49da-83a8-11ea-a61b-98fa9b04dfaf | 0 0 0 ? * * * |
--------------------------------------------------------

使用Camunda Modeler在myProcess.bpmn中直接更改CRON表达式,然后重新启动应用程序,这将更新数据库中的该值,并且流程协调器将使用新值。

问题

一旦我通过Bean从应用程序属性中动态加载此值,就会从属性中加载新值,[[logged,但不存储在数据库中,因此Camunda使用旧的值。

[application.properties,具有不同的随机值:process.timer: 1 2 3 ? * * *

@Slf4j @Configuration public class TimerConfiguration { @Value("${process.timer}") private String timerExpression; @Bean public String timerExpression() { // the log truly logs 1 2 3 ? * * * log.info("Periodical timer expression has been configured to: {}", timerExpression); return timerExpression; } }

Camunda进程myProcess.bpmn计时器定义(Link to the screen)使用动态值作为计时器定义:

${timerConfiguration.timerExpression()}

问题

如何使Camunda将配置的数据与其使用的数据库进行同步?没有抛出异常,应用程序继续使用数据库中的旧配置。

SELECT ID_, REPEAT_ from act_ru_job;

查询返回旧值。当在myProcess.bpmn进程内手动设置CRON表达式时,该值将在重启后更新。
java spring spring-boot camunda
1个回答
0
投票
快速回答:启动应用程序(例如,部署了进程)时,在进程引擎上带有计时器启动事件寄存器的进程...因此,“ timerExpression()”仅被读取一次...

我无法提出解决方法,除了重新部署bpmn以重新注册计时器...这会使基于表达式的计时器的概念过时。

一个非bpmn的解决方案可能是使用一个普通的调度程序bean,它只是通过runtimeService API启动一个进程,而根本不使用计时器启动事件。

© www.soinside.com 2019 - 2024. All rights reserved.