深入分析mysql 6.0.6 和 activiti 6.0.0自动创建表失败的问题

问题描述:使用的是mysql数据库,有两个数据库,一个dev,一个test。两个数据库除了数据库名不一样,其他信息均一样。activiti表的生成策略是,如果没有创建,有则更新。当dev或test数据库均未有activiti表时,连接任意一个均能成功,当任意一个有activiti表时,连接另外一个库,启动均报错,比如,dev有activiti表,连接test库,则错误信息如下:

### Error querying database.  Cause: java.sql.SQLSyntaxErrorException: Table 'test.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 'test.ACT_GE_PROPERTY' doesn't exist

问题分析:从错误上来看,是activiti查询的时候,"串库"了,认为test库里已经有activiti的表了,所以会执行查询操作。而实际上这些表是在dev库里。为什么会出现这样的情况呢,让我们深入activiti的源码看看吧。以下是activiti 6.0 DBSqlSession的更新逻辑。代码

public String dbSchemaUpdate() {
        String feedback = null;
        boolean isUpgradeNeeded = false;
        int matchingVersionIndex = -1;
        if (this.isEngineTablePresent()) {//判断的核心方法,看是否需要更新或创建
           //更新操作,省略
        } else {
            this.dbSchemaCreateEngine();
        }
        return feedback;
    }
public boolean isEngineTablePresent() {
        return this.isTablePresent("ACT_RU_EXEC
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值