我有一个Camunda进程,该进程每15分钟定期启动一次,这是使用CRON表达式配置的。我使用默认配置以默认data source configuration连接到MariaDB。
Camunda进程myProcess.bpmn
计时器定义:
starteble
和executable
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表达式时,该值将在重启后更新。
我无法提出解决方法,除了重新部署bpmn以重新注册计时器...这会使基于表达式的计时器的概念过时。
一个非bpmn的解决方案可能是使用一个普通的调度程序bean,它只是通过runtimeService API启动一个进程,而根本不使用计时器启动事件。