Spring boot springboot2.0集成hikariCP2.7.9,抛出;默认事务隔离级别检测失败(代理警告-接近“语法错误”);
HikariCP版本:2.7.9 JDK版本:1.8.0_111 数据库:MySQL 异常: HikariPool-1-池初始化期间出现异常。 2018-06-28 21:09:36.545 WARN 35084---[nio-8008-exec-2]c.z.h.p.PoolBase:HikariPool-1-默认事务隔离级别检测失败(代理警告-接近“:语法错误)。 java.sql.SQLException:代理警告-接近“”:语法错误 在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)~[mysql-connector-java-5.1.46.jar:5.1.46] 在com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)~[mysql-connector-java-5.1.46.jar:5.1.46] 在com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)~[mysql-connector-java-5.1.46.jar:5.1.46] 在com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)~[mysql-connector-java-5.1.46.jar:5.1.46] 在com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)~[mysql-connector-java-5.1.46.jar:5.1.46] 在com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2482)~[mysql-connector-java-5.1.46.jar:5.1.46] 在com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2440)~[mysql-connector-java-5.1.46.jar:5.1.46] 在com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1381)~[mysql-connector-java-5.1.46.jar:5.1.46] 在com.mysql.jdbc.ConnectionImpl.getTransactionIsolation(ConnectionImpl.java:3001)~[mysql-connector-java-5.1.46.jar:5.1.46] 在com.zaxxer.hikari.pool.PoolBase.checkDriverSupport(PoolBase.java:457)~[HikariCP-2.7.9.jar:?] 在com.zaxxer.hikari.pool.PoolBase.setupConnection(PoolBase.java:412)~[HikariCP-2.7.9.jar:?] 在com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:370)~[HikariCP-2.7.9.jar:?] 在com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:194)~[HikariCP-2.7.9.jar:?] 在com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:460)[HikariCP-2.7.9.jar:?] 在com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:534)[HikariCP-2.7.9.jar:?] 在com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115)[HikariCP-2.7.9.jar:?] 在com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)[HikariCP-2.7.9.jar:?] 位于org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:151)[spring-jdbc-5.0.6.RELEASE.jar:5.0.6.RELEASE] 位于org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:115)[spring-jdbc-5.0.6.RELEASE.jar:5.0.6.RELEASE] 位于org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:78)[spring-jdbc-5.0.6.RELEASE.jar:5.0.6.RELEASE] 在org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:82)[mybatis-spring-1.3.2.jar:1.3.2] 在org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:68)[mybatis-spring-1.3.2.jar:1.3.2] 在org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:338)[mybatis-3.4.6.jar:3.4.6] 在org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:84)[mybatis-3.4.6.jar:3.4.6] 在org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62)[mybatis-3.4.6.jar:3.4.6] 位于org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:326)[mybatis-3.4.6.jar:3.4.6] 在org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)[mybatis-3.4.6.jar:3.4.6] 在org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)[mybatis-3.4.6.jar:3.4.6] 在org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83)[mybatis-3.4.6.jar:3.4.6] 在org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)[mybatis-3.4.6.jar:3.4.6] 在org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)[mybatis-3.4.6.jar:3.4.6] 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)~[?:1.8.0_101] 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)~[?:1.8.0101] 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)~[?:1.8.0101] 在java.lang.reflect.Method.invoke(Method.java:498)~[?:1.8.0_101] 在org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433)[mybatis-spring-1.3.2.jar:1.3.2] 在com.sun.proxy.$Proxy92.selectList(未知源)[?:?] 在org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:230)[mybatis-spring-1.3.2.jar:1.3.2] 在org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:139)[mybatis-3.4.6.jar:3.4.6] 在org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:76)[mybatis-3.4.6.jar:3.4.6] 在org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)[mybatis-3.4.6.jar:3.4.6] 我的项目使用springboot 2.0和默认的integrate hikari 2.7.9 配置自定义数据源:Spring boot springboot2.0集成hikariCP2.7.9,抛出;默认事务隔离级别检测失败(代理警告-接近“语法错误”);,spring-boot,hikaricp,spring-mybatis,multi-database,Spring Boot,Hikaricp,Spring Mybatis,Multi Database,HikariCP版本:2.7.9 JDK版本:1.8.0_111 数据库:MySQL 异常: HikariPool-1-池初始化期间出现异常。 2018-06-28 21:09:36.545 WARN 35084---[nio-8008-exec-2]c.z.h.p.PoolBase:HikariPool-1-默认事务隔离级别检测失败(代理警告-接近“:语法错误)。 java.sql.SQLException:代理警告-接近“”:语法错误 在com.mysql.jdbc.SQLError.cre
@Bean(name = "xxOrderDSProperties")
@Qualifier("xxOrderDSProperties")
@ConfigurationProperties(prefix = "spring.datasource.datasource-xxorder")
public DataSourceProperties xxOrderDSProperties(){
return new DataSourceProperties();
}
@Bean(name = "xxorderDS")
@ConfigurationProperties(prefix = "spring.datasource.datasource-xxorder")
public DataSource dataSourcexxOrder(){
//return DruidDataSourceBuilder.create().build(); **//this could work**.
return xxOrderDSProperties().initializeDataSourceBuilder().build(); //**this throws above exception**
}
config properties application.yaml:
春天:
数据源:
数据源顺序:
类型:com.zaxxer.hikari.HikariDataSource
名称:数据源xxorder
url:jdbc:mysql://{$host}:{$port}/db?characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull
用户名:userxx
密码:pwdxx
驱动程序类名:com.mysql.jdbc.driver
我调试源代码并找到引发上述异常的代码:
try {
defaultTransactionIsolation = connection.getTransactionIsolation();
if (transactionIsolation == -1) {
transactionIsolation = defaultTransactionIsolation;
}
}
catch (SQLException e) {
LOGGER.warn("{} - Default transaction isolation level detection failed ({}).", poolName, e.getMessage());
if (e.getSQLState() != null && !e.getSQLState().startsWith("08")) {
throw e;
}
我发现连接只有一个名为“isolationLevel”的属性,而不是“transactionIsolation”,getTransactionIsolation总是得到异常
然后我把它和德鲁伊比较。德鲁伊可以跳过这个例外。并连接,执行sql操作成功。
德鲁伊的代码:
try {
this.underlyingTransactionIsolation = conn.getTransactionIsolation();
} catch (SQLException e) {
// compartible for alibaba corba
if ("HY000".equals(e.getSQLState())
|| "com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException".equals(e.getClass().getName())) {
// skip
} else {
throw e;
}
}
我想知道当使用mybatis配置访问mysql时,如何使hikariCP与springboot正确工作?有什么建议吗
谢谢。找到了原因。
我们使用atlas作为数据库中间件,它不能支持