BoneCP не восстанавливается после разрыва соединения
У меня проблема с BoneCP (0.7.1 RELEASE). Я думал что BoneCP.getConnection()
гарантирует, что он вернет объект подключения, предполагая, что БД жива.
Вот как я настроил свой пул
private void setupConnectionPool() throws SQLException
{
// setup the connection pool
String connectUri = "jdbc:mysql://master-mysql:3306/base?zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&useCompression=true";
BoneCPConfig config = new BoneCPConfig();
config.setJdbcUrl(connectUri);
config.setUsername("dbapp");
config.setPassword("meh");
config.setMinConnectionsPerPartition(5);
config.setMaxConnectionsPerPartition(10);
config.setPartitionCount(1);
config.setConnectionTimeoutInMs(5 * 1000);
this.connectionPool = new BoneCP(config); // setup the connection pool
}
тогда где-то в коде я использую это так
// I'm using Apache DbUtils
QueryRunner run = new QueryRunner();
Object result = run.query(this.connectionPool.getConnection(), query, handler, start, limit);
Попытка запустить этот запрос SQLException
с государством 08S01
(Ошибка связи).
Последующий звонок this.connectionPool.getConnection()
возвращает хорошую связь.
Но разве это не весь смысл пула соединений, чтобы мне не приходилось самостоятельно обрабатывать случаи потери соединения?
1 ответ
Он должен захватить 08S01 и уничтожить все соединения в пуле. Однако, если у вас несколько потоков, у вас может быть поток, который уже проверил соединение, которое может прерваться (остальные соединения должны снова стать ОК).
Пожалуйста, попробуйте 0.8.0-бета3-SNAPSHOT; Я совсем недавно очистил эту реализацию и добавил несколько тестов надежности, тестирующих различные сценарии, среди которых 08S01.