为什么 Camunda 生成一个数字流程实例 ID,而不是 UUID?
Why does Camunda generate a numeric process instance ID, instead of UUID?
Camunda 通常使用 UUID(例如 98631715-0b07-11ec-ab3b-68545a6e5055
)作为流程实例 ID。在我的项目中,正在生成一个像 124
这样的流程实例 ID,这对我来说很可疑。
此行为可以如下所述重现。
步骤 1
查看 this repository 并启动流程引擎
这样他们都使用同一个共享数据库。
步骤 2
在 http://localhost:8080
登录到 Camunda UI 并导航到任务列表。
启动任务列表中的 Starter process
。
步骤 3
转到驾驶舱并导航至 Running process instances
(http://localhost:8080/camunda/app/cockpit/default/#/processes
)。
单击 DomainProcess
。
在 ID
列中,您将看到一个数字(上面屏幕截图中的 135
)流程实例 ID,而不是 UUID。
错误的可能原因
在 core-processs
引擎中我有以下 Config class:
import org.camunda.bpm.engine.impl.history.HistoryLevel;
import org.camunda.bpm.engine.impl.history.event.HistoryEvent;
import org.camunda.bpm.engine.impl.history.handler.CompositeHistoryEventHandler;
import org.camunda.bpm.engine.impl.history.handler.HistoryEventHandler;
import org.camunda.bpm.engine.spring.SpringProcessEngineConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import static org.apache.commons.lang3.ArrayUtils.addAll;
@Configuration
public class Config {
private static final Logger LOGGER = LoggerFactory.getLogger(Config.class);
@Autowired
@Qualifier("camundaBpmDataSource")
private DataSource dataSource;
@Autowired
@Qualifier("camundaTxManager")
private PlatformTransactionManager txManager;
@Autowired
private ResourcePatternResolver resourceLoader;
@Bean
public SpringProcessEngineConfiguration processEngineConfiguration() {
final SpringProcessEngineConfiguration config = new SpringProcessEngineConfiguration();
config.setDataSource(dataSource);
config.setTransactionManager(txManager);
config.setDatabaseSchemaUpdate("true");
config.setHistory(HistoryLevel.HISTORY_LEVEL_FULL.getName());
config.setJobExecutorActivate(true);
config.setMetricsEnabled(false);
final Logger logger = LoggerFactory.getLogger("History Event Handler");
final HistoryEventHandler testHistoryEventHandler = new HistoryEventHandler() {
@Override
public void handleEvent(final HistoryEvent evt) {
LOGGER.debug("handleEvent | " + evt.getProcessInstanceId() + " | "
+ evt.toString());
}
@Override
public void handleEvents(final List<HistoryEvent> events) {
for (final HistoryEvent curEvent : events) {
handleEvent(curEvent);
}
}
};
config.setHistoryEventHandler(new CompositeHistoryEventHandler(Collections.singletonList(testHistoryEventHandler)));
try {
final Resource[] bpmnResources = resourceLoader.getResources("classpath:*.bpmn");
final Resource[] dmnResources = resourceLoader.getResources("classpath:*.dmn");
config.setDeploymentResources(addAll(bpmnResources, dmnResources));
} catch (final IOException exception) {
exception.printStackTrace();
LOGGER.error("An error occurred while trying to deploy BPMN and DMN files", exception);
}
return config;
}
}
如果我删除此配置(或注释 @Configuration
行),错误就会消失。
问题
为什么 Camunda 在这种情况下生成数字流程实例 ID(而不是像其他情况那样生成 UUID)?
添加行后
config.setIdGenerator(new StrongUuidGenerator());
配置中class
@Bean
public SpringProcessEngineConfiguration processEngineConfiguration() {
final SpringProcessEngineConfiguration config = new SpringProcessEngineConfiguration();
config.setIdGenerator(new StrongUuidGenerator());
config.setDataSource(dataSource);
流程实例 ID 再次变为 UUID。
有关详细信息,请参阅有关 ID generators 的 Camunda 文档。
Camunda 通常使用 UUID(例如 98631715-0b07-11ec-ab3b-68545a6e5055
)作为流程实例 ID。在我的项目中,正在生成一个像 124
这样的流程实例 ID,这对我来说很可疑。
此行为可以如下所述重现。
步骤 1
查看 this repository 并启动流程引擎
这样他们都使用同一个共享数据库。
步骤 2
在 http://localhost:8080
登录到 Camunda UI 并导航到任务列表。
启动任务列表中的 Starter process
。
步骤 3
转到驾驶舱并导航至 Running process instances
(http://localhost:8080/camunda/app/cockpit/default/#/processes
)。
单击 DomainProcess
。
在 ID
列中,您将看到一个数字(上面屏幕截图中的 135
)流程实例 ID,而不是 UUID。
错误的可能原因
在 core-processs
引擎中我有以下 Config class:
import org.camunda.bpm.engine.impl.history.HistoryLevel;
import org.camunda.bpm.engine.impl.history.event.HistoryEvent;
import org.camunda.bpm.engine.impl.history.handler.CompositeHistoryEventHandler;
import org.camunda.bpm.engine.impl.history.handler.HistoryEventHandler;
import org.camunda.bpm.engine.spring.SpringProcessEngineConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import static org.apache.commons.lang3.ArrayUtils.addAll;
@Configuration
public class Config {
private static final Logger LOGGER = LoggerFactory.getLogger(Config.class);
@Autowired
@Qualifier("camundaBpmDataSource")
private DataSource dataSource;
@Autowired
@Qualifier("camundaTxManager")
private PlatformTransactionManager txManager;
@Autowired
private ResourcePatternResolver resourceLoader;
@Bean
public SpringProcessEngineConfiguration processEngineConfiguration() {
final SpringProcessEngineConfiguration config = new SpringProcessEngineConfiguration();
config.setDataSource(dataSource);
config.setTransactionManager(txManager);
config.setDatabaseSchemaUpdate("true");
config.setHistory(HistoryLevel.HISTORY_LEVEL_FULL.getName());
config.setJobExecutorActivate(true);
config.setMetricsEnabled(false);
final Logger logger = LoggerFactory.getLogger("History Event Handler");
final HistoryEventHandler testHistoryEventHandler = new HistoryEventHandler() {
@Override
public void handleEvent(final HistoryEvent evt) {
LOGGER.debug("handleEvent | " + evt.getProcessInstanceId() + " | "
+ evt.toString());
}
@Override
public void handleEvents(final List<HistoryEvent> events) {
for (final HistoryEvent curEvent : events) {
handleEvent(curEvent);
}
}
};
config.setHistoryEventHandler(new CompositeHistoryEventHandler(Collections.singletonList(testHistoryEventHandler)));
try {
final Resource[] bpmnResources = resourceLoader.getResources("classpath:*.bpmn");
final Resource[] dmnResources = resourceLoader.getResources("classpath:*.dmn");
config.setDeploymentResources(addAll(bpmnResources, dmnResources));
} catch (final IOException exception) {
exception.printStackTrace();
LOGGER.error("An error occurred while trying to deploy BPMN and DMN files", exception);
}
return config;
}
}
如果我删除此配置(或注释 @Configuration
行),错误就会消失。
问题
为什么 Camunda 在这种情况下生成数字流程实例 ID(而不是像其他情况那样生成 UUID)?
添加行后
config.setIdGenerator(new StrongUuidGenerator());
配置中class
@Bean
public SpringProcessEngineConfiguration processEngineConfiguration() {
final SpringProcessEngineConfiguration config = new SpringProcessEngineConfiguration();
config.setIdGenerator(new StrongUuidGenerator());
config.setDataSource(dataSource);
流程实例 ID 再次变为 UUID。
有关详细信息,请参阅有关 ID generators 的 Camunda 文档。