Springboot2.0 интегрирует hikariCP2.7.9, выдает «Ошибка определения уровня изоляции транзакции по умолчанию (Предупреждение прокси-сервера - рядом с«. »: синтаксическая ошибка)». - PullRequest
0 голосов
/ 29 июня 2018

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. Есть предложения?

Спасибо.

1 Ответ

0 голосов
/ 29 июня 2018

Нашел причину. Мы используем атлас в качестве промежуточного программного обеспечения БД, и он не может поддерживать команду «SELECT @@ session.tx_isolation», когда используется hikari getTransactionIsolation. и будет выдано исключение «ОШИБКА 1105 (HY000): Предупреждение прокси-сервера - рядом». »: синтаксическая ошибка«

однако друид пропустил это синтаксическое исключение. и может выполнить следующий sql успех.

решения:

1.Если Хикари может пропустить это исключение, как друид, оно будет решено. 2. если атлас может поддерживать команду «SELECT @@ session.tx_isolation», она будет работать. 3. просто поменяй на друида.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...