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 > |
3. 自定義ID生成器
- Step 1:創建一個類實現接口org.activiti.engine.impl.cfg.IdGenerator
- Step 2:參考本文第2部分 ^_^