在jpa多数据源配置后,启动时,突然报了这个莫名其妙的异常信息(过去很多天了,异常信息当时没有及时记录),大概意思是,在进行数据库链接时发现有多余一个的同名的表存在,但是我的数据库明明只有一个这个名称的表,于是就点了点其他数据库,发现是有同名表存在的,那么为什么项目启动会扫描多个数据库,而不是一个写好地址的数据库呢?
网上有说是mysql驱动的版本问题,我的项目中使用的是
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
8.0 版本在数据库连接驱动信息发生了改变,由原来的 com.mysql.jdbc.Driver 变成了 com.mysql.cj.jdbc.Driver,并且,原来在 6.x 版本驱动的时候就将参数 nullCatalogMeansCurrent 的默认值由 true 改为了 false。
nullCatalogMeansCurrent这个参数的意思是:是否默认返回 datasource 指定库的表。也就是如果为 true,那么就从我们指定的数据库中找表;如果为 false,那么就从所有库中找表。
解决办法:
初始化连接的时候,为 nullCatalogMeansCurrent 参数指定为 true
spring.datasource.tradition.url=jdbc:mysql://localhost:62785/traditional?useSSL=false&useUnicode=true&autoReconnect=true&rewriteBatchedStatements=TRUE&nullCatalogMeansCurrent=true&serverTimezone=GMT%2B8