【问题标题】:When will camunda executeAsync() actually runcamunda executeAsync() 何时真正运行
【发布时间】:2021-08-23 17:34:09
【问题描述】:

我不清楚在 Camunda 7.15.0 版本中 executeAsync 是如何工作的。

在 spring-boot 应用程序中使用 Java 代码,我正在尝试使用迁移计划将几个流程实例从一个流程版本迁移到另一个。

在java代码中,当我使用execute()方法时,代码显然是立即执行的。

    import org.camunda.bpm.engine.RuntimeService;
                    
    final MigrationPlan migrationPlan = runtimeService.createMigrationPlan(fromProcessDefinitionId, toProcessDefinitionId).mapEqualActivities().build();
            
    final ProcessInstanceQuery processQuery = runtimeService.createProcessInstanceQuery().processDefinitionId(fromProcessDefinitionId); 
      
runtimeService.newMigration(migrationPlan).processInstanceQuery(processQuery).executeAsync();

但是当我使用executeAsync() 方法时,我看到批处理作业在批处理部分等待但没有完成。如何知道什么时候执行?

可以在https://github.com/firstpostt/camunda-demo-migration 中重新创建问题。它需要 postgres 数据库,并且需要在 application.yml 中提供凭据

act_ru_batch 表中有一个条目。我在 act_ru_job 表中没有看到任何条目

  1. 当我使用executeAsync() 方法时,我可以在 bpm-platform.xml 文件中配置以确保我的迁移计划在接下来的 15 分钟内运行吗?

  2. 是否有任何选项可以在需要时从管理座舱强制触发批处理?

【问题讨论】:

标签: spring-boot camunda


【解决方案1】:

发现问题。问题出在 Postgres 数据库上,但我不确定确切的根本原因是什么,因为该问题不容易重新创建。我删除了数据库并从头开始重新创建它,这似乎解决了问题(我再次使用 flyway 使用相同的 sql 脚本,所以没有改变 w.r.t 数据库架构。我能想到的唯一区别是,在一些数据已经填充到然后我在可能导致问题的 camunda 表上创建了唯一约束。现在我在将任何数据填充到表中之前立即创建了唯一约束)

附注

我在 postgres 数据库中使用了唯一约束 https://docs.camunda.org/manual/7.5/user-guide/process-engine/database/#additional-database-schema-configuration

我发现问题出在数据库上,因为我尝试使用 h2 文件系统数据库(camunda.bpm.database.schema-update 为 true,spring.datasource.url=jdbc:h2:~/camunda;DB_CLOSE_ON_EXIT=false)并且批处理工作正常。

然后我使用了 postgres 数据库(没有唯一的约束脚本)并且批处理工作正常。当我使用唯一约束脚本创建新的数据库模式时,批处理不起作用,即使我放弃了约束,批处理也不再起作用

所以我删除了数据库并在没有唯一约束的情况下再次创建了一个新数据库,然后批处理工作正常。之后我添加了唯一约束,批处理仍然可以正常工作。

我无法始终如一地重现该问题,但我的猜测是它与唯一约束有关。如果你没有使用这个唯一的约束,那么我相信这个问题永远不会发生

【讨论】:

    猜你喜欢
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多