在Activiti中使用UUID作为主键生成策略

简介:

1. 默认的主键生成策略

了解过Activiit表中数据的同学可能知道记录的主键ID是用自增的生成策略,这样的生成策略有两个优点:

  • 有顺序:所有引擎的表在插入新记录时全部使用同一个ID生成器
  • 便于记忆:因为是自增的所以有一定的顺序,便于记忆;例如业务人员让管理员删除一条数据(ID为5位左右的长度),管理员只要看一眼就可以记住

当然也有缺点

  • 随着时间的推移或者数据量非常大自增的ID生成策略的“便于记忆”优势也就不存在了,因为ID的位数会逐步增加(举个例子,我们公司做的一个小系统,用户量在30人左右,ID的长度已经到了7位数)
  • 并发量高时会可能导致主键冲突

在引擎初始化的时候会注册ID生成器,看过源码的同学还可能知道有一个类:org.activiti.engine.impl.db.DbIdGenerator,这个类实现了一个接口:org.activiti.engine.impl.cfg.IdGenerator

?
1
2
3
public interface IdGenerator {
   String getNextId();
}

该接口仅有一个方法,返回一个String类型的字符串,有兴趣的同学可以去看看引擎默认的生成器源码,接下来介绍如何更改引擎的主键生成器。

2. 更改默认的主键生成器

UUID是全球唯一的主键生成器,也是除自增策略之外最常用的一种,很幸运:引擎内置了UUID生成器实现。

要更改引擎默认的主键生成器很简单,只需要在配置引擎时覆盖一个属性即可,代码如下:

?
1
2
3
4
5
< bean id = "uuidGenerator" class = "org.activiti.engine.impl.persistence.StrongUuidGenerator" >
< bean id = "processEngineConfiguration" class = "org.activiti.spring.SpringProcessEngineConfiguration" >
     < property name = "idGenerator" ref = "uuidGenerator" >
</ property ></ bean >
</ bean >

ID为“uuidGenerator”的bean对象就是引擎内部提供的UUID生成器,把Bean对象注册好以后覆盖引擎的“idGenerator”属性即可;再次启动系统后创建的新数据都会用UUID生成策略。

2.1 添加依赖

引擎提供的UUID生成器依赖fastxml的一个模块,需要在pom.xml(Maven工程)中添加如下依赖:

?
1
2
3
4
5
< dependency >
     < groupid >com.fasterxml.uuid</ groupid >
     < artifactid >java-uuid-generator</ artifactid >
     < version >3.1.3</ version >
</ dependency >

用UUID生成策略产生的ID

3. 自定义ID生成器

  • Step 1:创建一个类实现接口org.activiti.engine.impl.cfg.IdGenerator
  • Step 2:参考本文第2部分 ^_^
目录
相关文章
|
Java 数据库
如何使用JPA的UUID主键生成策略
这篇文章只写给主键用uuid并且用jpa的小伙伴。 1. 数据实体类 @Entity @Table(name = "ip_user") @GenericGenerator(name = "jpa-uuid", strategy = "uuid") ...
3473 0
|
9月前
|
算法 数据库
MyBatisPlus之id生成策略
MyBatisPlus之id生成策略
298 0
|
10月前
|
Java 数据库连接 mybatis
mybatis获取insert后的主键id
主要是添加:useGeneratedKeys="true" keyProperty="id" keyColumn="id"。
104 0
|
前端开发 Java 数据库连接
Mybatis获取自增长的主键id
Mybatis获取自增长的主键id
Mybatis获取自增长的主键id
|
存储 SQL Oracle
Hibernate-05-主键生成策略
Hibernate-05-主键生成策略
Hibernate-05-主键生成策略
|
XML SQL Java
Hibernate-ORM:14.Hibernate中的命名查询
      ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------         本篇博客讲述命名查询,所谓命名查询是什么呢? Hibernate中允许我们在xml,实体类,甚至注解的方式来编写查询语句,本篇博客将讲述xml中的方式 一,准备好准备工作,我由于上篇博客把大量的准备都做好,所以,本篇从简 二,预览hbm.
1030 0
|
Java 数据库连接 mybatis
SSM-MyBatis-12:Mybatis中添加单个对象返回主键id列
  ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------     实体类   public class Book { private Integer bookID; private String bookName; ...
1109 0
|
Oracle 关系型数据库 Java
Hibernate主键生成策略及选择
1 .increment:适用于short,int,long作为主键,不是使用数据库自动增长机制 这是hibernate中提供的一种增长机制            在程序运行时,先进行查询:select max(id) from user;                              ...
742 0
|
Web App开发 Java 数据库连接