Activiti6集成springboot后不执行创建语句,直接报查询的表不存在

原因分析:之间在同一个mysql或orcle下的另外的一个库中创建过act_ru_execution这个表,在Activiti初始化的时候回去遍历所有库去找是否存在这个表,如果之前用过,它当然就不会去执行创建表的语句了。

情景再现。

        
            org.activiti
            activiti-spring-boot-starter-basic
            6.0.0
        

1、引用Activiti6.0

2、如果你数据库中没有生成过Activiti的表的话,第一次运行应该可以自动创建表。

3、但是当你换个库想用Activiti的话就会出现这个

Activiti6集成springboot后不执行创建语句,直接报查询的表不存在_第1张图片

表不存在!按说应该回去自己创建表,为什么他没去创建?原因是我之前在我mysql中的一个test库中运行过Activiti项目,他在那生成了act_开头的表,那么同学们应该问了,我连接的事另一个数据库 跟另一个库 有半毛钱的关系?答案是有半毛钱的关系,请看下图:

Activiti6集成springboot后不执行创建语句,直接报查询的表不存在_第2张图片

Activiti6集成springboot后不执行创建语句,直接报查询的表不存在_第3张图片

Activiti会根据

databaseSchemaUpdate的值去判断是去创建还是删除创建还是更新操作。默认是true

Activiti6集成springboot后不执行创建语句,直接报查询的表不存在_第4张图片

然后就去调用dbSchemaUpdate方法,

isEngineTablePresent()方法是个布尔类型的返回值,它是判断
ACT_RU_EXECUTION表存不存在,但是很奇怪他查询的方式是遍历当前数据源的所有数据库的方式去找这个表,没有的话就去创建act_这系列的表,也不知道算不算是个bug,下面附上查询表的源码:

Activiti6集成springboot后不执行创建语句,直接报查询的表不存在_第5张图片

你可能感兴趣的:(java,Activiti6)