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 - Ошибка определения уровня изоляции транзакции по умолчанию (Proxy Warning - near ".": Синтаксическая ошибка).
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 :?]
at 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]
at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) ~ [?: 1.8.0_101]at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) ~ [?: 1.8.0_101]
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) ~ [?: 1.8.0_101]
at 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 и Hikari 2.7.9 по умолчанию.
config пользовательский источник данных:
@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:
весна:
источник данных:
DataSource-xxorder:
Тип: 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;
}
Я обнаружил, что соединение просто имеет свойство с именем «изоляция», а не «транзакция транзакции», и метод 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;
}
}
Я хочу знать, как заставить hikariCP корректно работать с springboot при настройке mybatis для доступа к mysql. Есть предложения?
Спасибо.