activiti uuid主键
1.1.1. activiti默认主键生成方式
;
下面我们看一下主键的生成策略:主键的生成策略定义在IdGenerator接口中,接口定义如下所示:
public interface IdGenerator {
String getNextId();
}
getNextId()方法定义了主键生成的策略,每次需要主键的时候直接从getNextId()方法中获取即可。
下面看一下IdGenerator接口的实现类,具体的实现结构如下:
1.DbIdGenerator默认的方式,没有依赖第三方jar包。
2.org.activiti.engine.impl.persistence.StrongUuidGenerator类使用的uuid生成主键的策略。依赖第三方包com.fasterxml.uuid.impl.TimeBasedGenerator 使用的时候需要添加jar包。具体的maven仓库如下所示:
<dependency> <groupId>com.fasterxml.uuid</groupId> <artifactId>java-uuid-generator</artifactId> <version>3.1.4</version> </dependency>
使用的时候,如果没有上面的jar包,程序报错不能使用。
1.1.2. activiti主键生成策略源码初始化分析
首先进入org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl类 查看initIdGenerator() 方法,这个方法是主键生成策略的选定。
protected void initIdGenerator() { //用户自定义主键生成策略,优先使用自定义生成策略 if (idGenerator==null) { CommandExecutor idGeneratorCommandExecutor = null; //idGeneratorDataSource专门的主键生成的datasource配置 if (idGeneratorDataSource!=null) { ProcessEngineConfigurationImpl processEngineConfiguration = new StandaloneProcessEngineConfiguration(); processEngineConfiguration.setDataSource(idGeneratorDataSource); processEngineConfiguration.setDatabaseSchemaUpdate(DB_SCHEMA_UPDATE_FALSE); processEngineConfiguration.init(); idGeneratorCommandExecutor = processEngineConfiguration.getCommandExecutor(); } else if (idGeneratorDataSourceJndiName!=null) { //jndi方式生成id,
分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519) ProcessEngineConfigurationImpl processEngineConfiguration = new StandaloneProcessEngineConfiguration(); processEngineConfiguration.setDataSourceJndiName(idGeneratorDataSourceJndiName); processEngineConfiguration.setDatabaseSchemaUpdate(DB_SCHEMA_UPDATE_FALSE); processEngineConfiguration.init(); idGeneratorCommandExecutor = processEngineConfiguration.getCommandExecutor(); } else { idGeneratorCommandExecutor = getCommandExecutor(); } //上面的两种方式都没有使用,则使用默认的主键生成策略 DbIdGenerator dbIdGenerator = new DbIdGenerator(); dbIdGenerator.setIdBlockSize(idBlockSize); dbIdGenerator.setCommandExecutor(idGeneratorCommandExecutor); dbIdGenerator.setCommandConfig(getDefaultCommandConfig().transactionRequiresNew()); idGenerator = dbIdGenerator; } }
1.1.3. 自定义IdGenerator生成策略
1.1.3.1. 自定义类
@Service public class UUIDGenerator implements IdGenerator { @Override public String getNextId() {
分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519) return UUID.randomUUID().toString().replace("-", ""); } }
1.1.3.2. 配置使用
@Service public class MyProcessEngineConfigurator extends AbstractProcessEngineConfigurator{ @Autowired private UUIDGenerator uUIDGenerator;
分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519) @Override public void beforeInit( ProcessEngineConfigurationImpl processEngineConfiguration) { DataSource dataSource = JdbcUtils.getReadDataSource(); processEngineConfiguration.setDataSource(dataSource); processEngineConfiguration.setHistoryLevel(HistoryLevel.FULL); processEngineConfiguration.setDbIdentityUsed(false); processEngineConfiguration.setProcessEngineLifecycleListener(myProcessEngineConfigurator); processEngineConfiguration.setIdGenerator(uUIDGenerator); } }
1.1.4. activiti主键策略小结
小结:
1.默认的DbIdGenerator生成策略,数据量不大的情况下,看起来直观一点,可以快速定位要需要查询的视图中。当数据量大的时候,看起来也不直观。
2.默认的DbIdGenerator生成策略,主键的id存储在数据库,缓存中没有的时候,回去查询数据库,所以如果频繁的查询数据库生成主键,不可取。对性能有影响。并发大的时候,此方案不可取。
3.内置的StrongUuidGenerator生成策略,生成的是UUID,缺点:使用的时候需要添加第三方的jar包。感觉没有必要生成uuid的时候,使用第三方工具。
使用自己的uuid生成类,简单明了,可以自己控制生成的策略,不需要第三方的生成工具,直接使用的jdk中的java.util.UUID类。可控性更强。
分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519)
activiti uuid主键的更多相关文章
- hibernate annotation 生成uuid主键
JPA标准方式下,不可以生成uuid类型的主键,但是hibernate提供了一些方式生成uuid主键,具体如下: 1.主键生成器 @GeneratedValue(generator=" ...
- MySql中利用insert into select 准备数据uuid主键冲突
MYSQL 中表1需要准备大量数据,内容主要取自表2,id必须为32位uuid (项目所有表都是这样,没办法), 准备这样插入: INSERT INTO TBL_ONE (ID, SOID, SNAM ...
- mybatis 主键UUID生成策略
<insert id="insert" parameterType="com.lsfwpt.lawmis.po.SysUser"> <sele ...
- MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)
测试缘由 一个开发同事做了一个框架,里面主键是uuid,我跟他建议说mysql不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的,为了拿 ...
- MySQL 使用自增ID主键和UUID 作为主键的优劣比較具体过程(从百万到千万表记录測试)
主键类型 SQL语句 运行时间 (秒) (1)模糊范围查询1000条数据,自增ID性能要好于UUID 自增ID SELECT SQL_NO_CACHE t.* FROM test.`UC_US ...
- MySQL主键设计
[TOC] 在项目过程中遇到一个看似极为基础的问题,但是在深入思考后还是引出了不少问题,觉得有必要把这一学习过程进行记录. MySQL主键设计原则 MySQL主键应当是对用户没有意义的. MySQL主 ...
- insert主键返回 selectKey使用
有时候新增一条数据,知道新增成功即可,但是有时候,需要这条新增数据的主键,以便逻辑使用,再将其查询出来明显不符合要求,效率也变低了. 这时候,通过一些设置,mybatis可以将insert的数据的主键 ...
- Hibernate主键生成策略及选择
1 .increment:适用于short,int,long作为主键,不是使用数据库自动增长机制 这是hibernate中提供的一种增长机制 在程序运行时,先进行查询:select max(id) f ...
- Mybatis里Mapper映射sql文件里insert的主键返回selectKey使用
有时候新增一条数据,知道新增成功即可,但是有时候,需要这条新增数据的主键,以便逻辑使用,再将其查询出来明显不符合要求,效率也变低了. 这时候,通过一些设置,mybatis可以将insert的数据的主键 ...
随机推荐
- 在脚本中使用source命令不生效
问题描述 1. 一次写自动化安装脚本,要安装java,需要将JAVA_HOME写到/etc/profile中,然后使用source命令,但是发现profile文件中确实有JAVA_HOME,使用 ...
- mybatis学习一
1:ORM概念 ORM(OBJECT-RELATIONSHIP MAPPING) 即对象关系映射,是一种思想,实质是将数据库中的数据用对象的形式表现出来 JPA(JAVA PERSISIT ...
- EntityFramework Core 学习系列(一)Creating Model
EntityFramework Core 学习系列(一)Creating Model Getting Started 使用Command Line 来添加 Package dotnet add pa ...
- POJ 1721 CARDS
Alice and Bob have a set of N cards labelled with numbers 1 ... N (so that no two cards have the sam ...
- Codeforces Round #460 D. Karen and Cards
Description Karen just got home from the supermarket, and is getting ready to go to sleep. After tak ...
- 51 nod 1495 中国好区间
1495 中国好区间 基准时间限制:0.7 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 阿尔法在玩一个游戏,阿尔法给出了一个长度为n的序列,他认为,一段好的区间,它的长度是& ...
- 【luogu2161】【SHOI2009】Booking会场预约
原题传送门 题意简析:你需要写一个数据结构,维护一个时间轴,支持如下操作: 1)插入1个新区间,删除所有时间轴上与它有交的区间并输出个数. 2)查询当前时间轴上的区间个数. 解题思路:裸的无旋trea ...
- 【LSGDOJ 1351】关灯
题目描述 多瑞卡得到了一份有趣而高薪的工作.每天早晨他必须关掉他所在村庄的街灯.所有的街灯都被设置在一条直路的同一侧. 多瑞卡每晚到早晨 5 点钟都在晚会上,然后他开始关灯.开始时,他站在某一盏路灯的 ...
- [BZOJ]3671 随机数生成器(Noi2014)
洛谷上卡不过去的朋友们可以来看看小C的程序(小C才不是标题党呢!) Description Input 第1行包含5个整数,依次为 x_0,a,b,c,d ,描述小H采用的随机数生成算法所需的随机种子 ...
- bzoj1858[Scoi2010]序列操作 线段树
1858: [Scoi2010]序列操作 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 3079 Solved: 1475[Submit][Statu ...