Tôi đã tạo một Bể bơi bằng cách sử dụng ConnectionPool như sau:Hết giờ chờ đối tượng nhàn rỗi Kết nối Apache Pool
Tôi tạo một số taks để getConection từ cơ sở dữ liệu và thực hiện chúng. Tôi chỉ chạy ứng dụng của tôi chỉ 3 lần, ứng dụng của tôi ném ngoại lệ.
PoolableObjectFactory mySqlPoolableObjectFactory = new MySqlPoolableObjectFactory(
host, dbName, user, password);
Config config = new GenericObjectPool.Config();
config.maxActive = 10;
config.testOnBorrow = true;
config.testWhileIdle = true;
config.maxIdle = 5;
config.minIdle = 1;
config.maxWait = 10000;
config.timeBetweenEvictionRunsMillis = 10000;
config.minEvictableIdleTimeMillis = 60000;
GenericObjectPoolFactory genericObjectPoolFactory = new GenericObjectPoolFactory(
mySqlPoolableObjectFactory, config);
return genericObjectPoolFactory.createPool();
public Connection getConnectionFromPool() {
Connection conn = null;
try {
conn = (Connection) connPool.borrowObject();
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
Nhưng khi tôi chạy nhiều chuỗi. Nó ném exeption
java.util.NoSuchElementException: Timeout waiting for idle object
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1174)
at vn.vccorp.bigdata.mysql.AdmarketPool.getConnectionFromPool(AdmarketPool.java:76)
bạn có trả lại các đối tượng cho nhóm bằng phương thức returnObject không? –
Vâng, tôi kết nối nhất luôn gần gũi sau khi kết thúc sql của tôi sử dụng public void safeClose (kết nối conn) { \t \t if (conn = null) { \t \t \t try { \t \t \t \t connPool.returnObject (conn); \t \t \t} bắt (Ngoại lệ e) { \t \t \t \t e.printStackTrace(); \t \t \t} \t \t} \t} – phuongdo