当前位置: 代码迷 >> 综合 >> Activiti 工作流引擎 ~ 主键生成
  详细解决方案

Activiti 工作流引擎 ~ 主键生成

热度:2   发布时间:2023-12-08 17:36:41.0

本文使用的Activiti版本为5.22.0

在使用官方提供的demo(activiti-explorer.war)时,发现其产生的记录ID与公司项目中产生的ID不同。
在查看相关配置信息时发现了如下配置:

<bean id="uuidGenerator" class="org.activiti.engine.impl.persistence.StrongUuidGenerator" /><bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">//...<property name="idGenerator" ref="uuidGenerator" />//...
</bean>

这里写图片描述

这里写图片描述

可以看到IdGenerator接口有两个实现类DbIdGeneratorStrongUuidGenerator
这里写图片描述

这里写图片描述
通过initIdGenerator()可知,创建processEngineConfiguration对象时,会判断idGenerator是否为null,若在创建时已经传入了idGenerator属性,则使用外部传入的idGenerator,否则使用DbIdGenerator创建对象并赋值给idGenerator属性

package org.activiti.engine.impl.persistence;import org.activiti.engine.impl.cfg.IdGenerator;import com.fasterxml.uuid.EthernetAddress;
import com.fasterxml.uuid.Generators;
import com.fasterxml.uuid.impl.TimeBasedGenerator;/*** {@link IdGenerator} implementation based on the current time and the ethernet* address of the machine it is running on.* * @author Daniel Meyer*/
public class StrongUuidGenerator implements IdGenerator {
    // different ProcessEngines on the same classloader share one generator.protected static TimeBasedGenerator timeBasedGenerator;public StrongUuidGenerator() {ensureGeneratorInitialized();}protected void ensureGeneratorInitialized() {if (timeBasedGenerator == null) {synchronized (StrongUuidGenerator.class) {if (timeBasedGenerator == null) {timeBasedGenerator = Generators.timeBasedGenerator(EthernetAddress.fromInterface());}}}}public String getNextId() {return timeBasedGenerator.generate().toString();}}

查看StrongUuidGenerator.java文件可以发现,StrongUuidGenerator类依赖于com.fasterxml.uuid,对应的maven依赖如下:

<dependency><groupId>com.fasterxml.uuid</groupId><artifactId>java-uuid-generator</artifactId><version>3.1.5</version>
</dependency> 

The Central Repository

  相关解决方案