SpringBoot整合activity7,首次启动时报错

232 阅读1分钟

报错如下:

org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.sql.SQLSyntaxErrorException: Table 'matebase.act_ge_property' doesn't exist
### The error may exist in org/activiti/db/mapping/entity/Property.xml
### The error may involve org.activiti.engine.impl.persistence.entity.PropertyEntityImpl.selectProperty-Inline
### The error occurred while setting parameters
### SQL: select * from ACT_GE_PROPERTY where NAME_ = ?
### Cause: java.sql.SQLSyntaxErrorException: Table 'matebase.act_ge_property' doesn't exist

原因:

MySQL版本8.xxx以后当上会出现该问题,改成了5.1.6版本,该错误解决了。 因为mysql使用schema标识库名而不是catalog,因此mysql会扫描所有的库来找表,如果其他库中有相同名称的表,activiti就以为找到了,本质上这个表在当前数据库中并不存在。

解决方案:

配置mysql连接时加上:nullCatalogMeansCurrent=true

nullCatalogMeansCurrent = true: 返回指定库涉及表
nullCatalogMeansCurrent = false: 返回所有库涉及表

在mysql-connector-java 5.xxx该参数默认为true,在6.xxx以上默认为false,因此需要设置nullCatalogMeansCurrent=true。