在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
publicinterface IdGenerator {
  String getNextId();
}

該接口僅有一個方法,返回一個String類型的字符串,有興趣的同學可以去看看引擎默認的生成器源碼,接下來介紹如何更改引擎的主鍵生成器。

2. 更改默認的主鍵生成器

UUID是全球唯一的主鍵生成器,也是除自增策略之外最常用的一種,很幸運:引擎內置了UUID生成器實現。

要更改引擎默認的主鍵生成器很簡單,只需要在配置引擎時覆蓋一個屬性即可,代碼如下:

?
1
2
3
4
5
<beanid="uuidGenerator"class="org.activiti.engine.impl.persistence.StrongUuidGenerator">
<beanid="processEngineConfiguration"class="org.activiti.spring.SpringProcessEngineConfiguration">
    <propertyname="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部分 ^_^
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章