Я пытаюсь подключиться к базе данных mysql
, используя apache
dbcp2
пул соединений, следуя инструкциям, приведенным здесь:
https://git -wip-us.apache.org / репо / АФС р = Обще-dbcp.git; а = блоб; F = DOC / PoolingDataSourceExample.java; ч = 2a12c74898930b9623223db1597b8a8052a6f1df; ПП = ГОЛОВКА
Класс соединения с моей базой данных, который возвращает соединение, выглядит примерно так:
public class DbConnection {
private static interface Singleton {
final DbConnection INSTANCE = new DbConnection();
}
private final PoolingDataSource<PoolableConnection> dataSource;
private DbConnection() {
// A ConnectionFactory that the pool will use to create Connections.
DriverManagerConnectionFactory connectionFactory = new DriverManagerConnectionFactory(url, user, pass); //url,user,pass for db connnection
//implement the pooling functionality.
PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory, null);
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
config.setMaxWaitMillis(500);
config.setMaxTotal(20);
config.setMaxIdle(5);
config.setMinIdle(5);
//PoolingDataSource expect an ObjectPool
ObjectPool<PoolableConnection> connectionPool = new GenericObjectPool<>(poolableConnectionFactory, config);
// Set the poolableConnectionFactory's pool property to the owning pool
poolableConnectionFactory.setPool(connectionPool);
this.dataSource = new PoolingDataSource<>(connectionPool);
}
public static Connection getCon() throws SQLException {
return Singleton.INSTANCE.dataSource.getConnection();
}
}
Я использую apache jmeter для проверки соединения и возврата чего-либо из моей базы данных mysql. Я создал 100 пользователей с периодами разгона (в секундах), равными 2 секундам. Я создал Http request
, и когда я попытался увидеть свой ответ в view results tree
, я успешно получил ответ на первые 20 запросов. Более поздние запросы от (21 до 100) имеют пустой ответ. Я прошел через многие из проблем, связанных с:
java.sql.SQLException: не удается получить соединение, ошибка пула Timeout
ожидание незанятого объекта
Я получаю доступ к своему коду как:
try (PreparedStatement ps = DbConnection.getCon().prepareStatement("SELECT id FROM test WHERE id =?;")) {
ps.setString(1, id);
try (
ResultSet rs = ps.executeQuery()) {
return rs.next();
}
} catch (Exception ex) {
}