Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果进程是通过bean配置的,则重新启动时不会更新带有Camunda-DB的Spring_Java_Spring_Spring Boot_Camunda - Fatal编程技术网

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

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

我有一个Camunda进程,它会定期启动15分钟,使用CRON表达式进行配置。我使用默认配置以默认方式连接到MariaDB

卡蒙达进程
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没有正式关联。