高并发下使用的UUID id生成器
在某些(非常)高并发负载的情况下,默认的id生成器可能会由于不能足够快地获取新的id块而产生异常。每一个流程引擎都有一个id生成器。默认的id生成器在数据库中保留一个块的id,这样其他引擎就不能使用同一个块中的id。在引擎操作时,当默认的id生成器发现id块已经用完,就会启动一个新的事务,来获取一个新的块。在(非常)有限的使用场景下,当负载非常高时可能导致问题。对于大多数用例来说,默认的id生成器已经足够使用了。默认的org.flowable.engine.impl.db.DbIdGenerator
也有一个idBlockSize
参数,用于配置保留的id块的大小,可以调整获取id的行为。
默认的id生成器的替代品是org.flowable.engine.impl.persistence.StrongUuidGenerator
,它会在本地生成一个唯一的UUID,并将其用作所有实体的标识符。因为UUID不需要访问数据库就能生成,因此在非常高并发的使用场景下更合适。请注意取决于机器,性能可能与默认的id生成器不同(更好更坏都有可能)。
可以在flowable配置中,像下面这样配置UUID生成器:
<property name="idGenerator"> <bean class="org.flowable.engine.impl.persistence.StrongUuidGenerator" /> </property>
使用UUID id生成器需要添加下列额外依赖:
<dependency> <groupId>com.fasterxml.uuid</groupId> <artifactId>java-uuid-generator</artifactId> <version>3.1.3</version> </dependency>