1. 程式人生 > >在Activiti中使用UUID作為主鍵生成策略

在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部分 ^_^