Java 如果进程是通过bean配置的,则重新启动时不会更新带有Camunda-DB的Spring
我有一个Camunda进程,它会定期启动15分钟,使用CRON表达式进行配置。我使用默认配置以默认方式连接到MariaDB 卡蒙达进程Java 如果进程是通过bean配置的,则重新启动时不会更新带有Camunda-DB的Spring,java,spring,spring-boot,camunda,Java,Spring,Spring Boot,Camunda,我有一个Camunda进程,它会定期启动15分钟,使用CRON表达式进行配置。我使用默认配置以默认方式连接到MariaDB 卡蒙达进程myProcess.bpmn计时器定义: ${timerConfiguration.timerExpression()} 该过程是starteble和executable 计时器定义类型为Cycle,计时器定义为0?*** 根据我观察到的值,该值存储在REPEAT\uu列的ACT\u RU\u JOB表中 SELECT ID_, REPEAT_ from a
myProcess.bpmn
计时器定义:
${timerConfiguration.timerExpression()}
- 该过程是
和starteble
executable
- 计时器定义类型为
,计时器定义为Cycle
0?***代码>
REPEAT\uu
列的ACT\u RU\u JOB
表中
SELECT ID_, REPEAT_ from act_ru_job;
--------------------------------------------------------
| ID_ | REPEAT_ |
--------------------------------------------------------
| 0d1f49da-83a8-11ea-a61b-98fa9b04dfaf | 0 0 0 ? * * * |
--------------------------------------------------------
使用Camunda Modeler在myProcess.bpmn
中更改右侧的CRON表达式,然后重新启动应用程序,更新了数据库中的此值,流程编排器使用新值
问题
只要我通过bean从应用程序属性中动态加载该值,就会加载属性中的新值,将其记录下来,但不会存储在数据库中,因此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
timer definition()使用动态值作为计时器定义:
${timerConfiguration.timerExpression()}
问题
如何使Camunda将配置的数据与其使用的数据库同步?不会引发异常,应用程序将继续使用数据库中的旧配置
SELECT ID_, REPEAT_ from act_ru_job;
查询返回旧值。在myProcess.bpmn
进程内部手动设置CRON表达式时,该值在重新启动后更新。快速回答:启动应用程序(例如,部署进程)时,进程引擎上有计时器启动事件寄存器的进程。。。所以“timerExpression()”只读取一次
我还不能想出一个解决办法。。。除了重新部署bpmn以重新注册计时器之外。。。这将使基于表达式的计时器的概念过时
非bpmn解决方案可以是使用普通的调度程序bean,它只是通过runtimeService API启动一个进程,而根本不使用计时器启动事件。听起来很合理,谢谢你的回答。您是Camunda的开发者还是更有经验的用户?某种贡献者,但与Camunda没有正式关联。