代码部署后,所有数据库操作报Invalid bound statement,原来是打包的问题

[问题描述]

前段时间将打包后的代码部署到测试环境运行,结果所有对数据库操作的代码报错,如下所示:

Invalid bound statement (not found): com.xxcloud.dao.UserMapper.getKeysInfo,
[org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:225),
org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48),
org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:65),
org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58),
com.sun.proxy.$Proxy147.getKeysInfo(Unknown Source),

这个错误眼熟,就是mapper字段绑定异常。可以肯定的是,就是我部署前,代码都是在正常运行的。那么,我推断,跟我打包有关系,肯定是什么地方的配置有问题。

同时,叫另外一个同事重新打包部署,果然是OK的。这印证了我的推断。

将可以运行的包下载到本地,解压后,跟我本地打的包进行对比,主要有三个地方:

1、所有的Mapper.xml文件是不是有打包进去。

2、配置文件中的是否有配置扫描mapper文件

mybatis-plus.mapper-locations

3、我们的配置文件都是分成dev、pro、test三份的,所以检查有没被引入。

经过对比发现,果然有问题。

同事的配置是这样的

spring.profiles.active=devw 

  

我的配置是这样的

spring.profiles.active=@spring.profiles.active@

  

这明显不对,但是我又不知道到底为什么变量“@spring.profiles.active@”没有替换为dev。

在网络上换着关键词查,当我看到下面这个图时,突然想起来,前段时间我在引入jar包的时候,曾经修改过这个配置。  

代码部署后,所有数据库操作报Invalid bound statement,原来是打包的问题

勾选dev,再次打包,果真跟同事的一样了。