目录
- 前言
- 异常
- 排查
- 原因
- 解决
- 使用systemPath标签引入本地Jar包后无法打包
前言
1、对接民航电子数据库
2、框架为shardingsphere + caedb + mybatis
3、部分SQL查询时,会出现字段缺失的情况
4、查看日志打印出来的SQL,字段并未缺失
异常
这里省略SQL语句
排查
1、通过截图可以看出,数据库返回的字段是完整的,并没有缺失
2、但是在映射结果的时候,字段缺失了
3、发现缺失的字段,在SQL解析时,连字段别名都是错误的
4、发现执行SQL时,是以SQL92的语法来执行的,并不是MySQL
5、shardingsphere是根据数据库链接来判断数据库类型,由于cae还未合并到开源社区,所以找不到对应的数据库类型
原因
民航电子数据库(CAEDB)还未合并到开源社区,shardingsphere还未兼容cae数据库,所以shardingsphere处理SQL时,是以SQL92的语法来解析SQL,导致部分SQL出现奇奇怪怪的异常情况
解决
排除shardingsphere-sql-parser-binder 、shardingsphere-common,使用民航电子数据库那边提供的Jar包
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.1.1</version>
<exclusions>
<!--民航电子数据库:排除shardingsphere以下两个依赖-->
<exclusion>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-sql-parser-binder</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-common</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--民航电子数据库:引入本地依赖-->
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-sql-parser-binder</artifactId>
<version>4.1.1</version>
<systemPath>${project.basedir}/lib/apache-shardingsphere-binder-4.1.1.jar</systemPath>
<scope>system</scope>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>apache-shardingsphere-common</artifactId>
<version>4.1.1</version>
<systemPath>${project.basedir}/lib/apache-shardingsphere-common-4.1.1.jar</systemPath>
<scope>system</scope>
</dependency>
更换后SQL正常执行
使用systemPath标签引入本地Jar包后无法打包
http://t.csdnimg.cn/iw1yw