Glassfish不重用JDBC连接

时间:2015-07-22 09:43:04

标签: java jdbc glassfish pooling

我在glassfish网络服务器上使用JDBC连接池。我正在通过以下声明注入DataSource:

@Resource(lookup="database")
DataSource db;

我用来加载数据的代码如下所示:

public ArrayList<Stuff> loadStuff()throws SQLException{
    PreparedStatement ps = db.getConnection().prepareStatement("Select * from stufftable");
    ResultSet rs = ps.executeQuery();
    ArrayList<Stuff> stuffs= new ArrayList<Stuff>();
    if(rs.next()){
        Stuff stuff = new Stuff();
        stuff.setString1(rs.getString("string1"));
        stuff.setString1(rs.getString("string1"));
        stuffs.add(stuff );
    }
    return stuffs;
}

由于某种原因,glassfish没有重用数据库连接,所以我的速度很快就用完了。 迟早我总是会收到此错误:Error in allocating a connection. Cause: In-use connections equal max-pool-size and expired max-wait-time. Cannot allocate more connections.

正如我理解在glassfish上汇集的概念:我在使用它之后不应该关闭连接,所以其他东西可以在需要时重用连接。当不再需要连接时,Glassfish会自行关闭连接。

为什么我的程序每次都会打开一个新连接?我完成后,是否必须对连接做些什么?

2 个答案:

答案 0 :(得分:2)

您仍然需要致电Connection.close()。您的池将管理您的连接,因此它们不会真正关闭,但如果您不在代码中“关闭”它们,它们将不会返回池中。

修改:或者,使用try-with-resources: https://stackoverflow.com/a/8066594/212224

答案 1 :(得分:1)

Connection con = db.getConnection();
try {
    PreparedStatement ps = con.prepareStatement("Select * from stufftable");
    ...
} finally {
    // this returns the connection to the pool
    con.close();
}