Я использую mariadb-connector
с hikari
для подключения к mysql
дБ.
В какой-то момент мне нужно отправить оператор LOAD DATA
, поэтому развертывание соединения выполняется следующим образом:
public static Connection prepareConnection(DataSource ds) throws SQLException {
java.sql.Connection con = DataSourceUtils.getConnection(ds);
con.setAutoCommit(false);
con.setAllowLoadLocalInfile(true);
Statement st = (Statement) con.createStatement();
st.executeQuery("SET unique_checks = 0");
st.executeQuery("SET foreign_key_checks = 0");
st.executeBatch();
JdbcUtils.closeStatement(st);
return con;
}
//preparing the LOAD DATA INFILE
MariaDbStatement loaddata = null;
if (ps.isWrapperFor(MariaDbStatement.class)) {
loaddata = ps.unwrap(MariaDbStatement.class);
loaddata.setLocalInfileInputStream(new ByteArrayInputStream(item.getBytes()));
}
Connection con = prepareConnection(ds);
//then using the con directly to send the loaddata statement
Проблема: я импортирую довольно большой файл, собираю операторы и фиксирую их вручную в виде фрагментов.Всегда примерно через 20 минут Connection
(который я использую в течение всего импорта) уже закрывается.Вероятно, это связано с тем, что я использую соединение напрямую, и пул соединений hikari/mariadb
, возможно, уже определил это?
Вопрос: какой параметр пула мог вызывать это?
2018-11-29 22:33:34.417 WARN 2200 --- [pool-3-thread-1] com.zaxxer.hikari.pool.ProxyConnection : HikariPool-1 - Connection org.mariadb.jdbc.MariaDbConnection @599e4925 marked as broken because of SQLSTATE(08000), ErrorCode(1220)
java.sql.SQLNonTransientConnectionException: (conn=1570) Connection is closed
at org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.get(ExceptionMapper.java:234) ~[mariadb-java-client-2.3.0.jar!/:na]
at org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.getException(ExceptionMapper.java:165) ~[mariadb-java-client-2.3.0.jar!/:na]
at org.mariadb.jdbc.MariaDbStatement.executeExceptionEpilogue(MariaDbStatement.java:238) ~[mariadb-java-client-2.3.0.jar!/:na]
at org.mariadb.jdbc.MariaDbStatement.executeInternal(MariaDbStatement.java:356) ~[mariadb-java-client-2.3.0.jar!/:na]
at org.mariadb.jdbc.MariaDbStatement.execute(MariaDbStatement.java:407) ~[mariadb-java-client-2.3.0.jar!/:na]
at org.mariadb.jdbc.MariaDbConnection.rollback(MariaDbConnection.java:76) ~[mariadb-java-client-2.3.0.jar!/:na]
at com.zaxxer.hikari.pool.ProxyConnection.rollback(ProxyConnection.java:370) ~[HikariCP-3.2.0.jar!/:na]
at com.zaxxer.hikari.pool.HikariProxyConnection.rollback(HikariProxyConnection.java) ~[HikariCP-3.2.0.jar!/:na]
Caused by: java.sql.SQLException: Connection is closed
at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.cmdPrologue(AbstractQueryProtocol.java:1801) ~[mariadb-java-client-2.3.0.jar!/:na]
at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:212) ~[mariadb-java-client-2.3.0.jar!/:na]
at org.mariadb.jdbc.MariaDbStatement.executeInternal(MariaDbStatement.java:350) ~[mariadb-java-client-2.3.0.jar!/:na]
... 12 common frames omitted
Примечание: раньше я использовал mysql-connector
, у которого не была эта проблема.Также с теми же настройками пула хикари.Таким образом, я предполагаю, что должна быть какая-то настройка mariadb-connector
, которая может привести к закрытию основного соединения?