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] czhpPoolBase: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] at 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。
我的项目使用springboot 2.0,默认集成hikari 2.7.9。
配置自定义数据源:
@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**
}
配置属性 application.yaml: spring: datasource: datasource-xxorder: type: com.zaxxer.hikari.HikariDataSource name: datasource-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一起正常工作?有什么建议吗?
谢谢。