可以不在每个方法中关闭 javax.sql.DataSource 吗?

Is it okay not to close javax.sql.DataSource in every method?

我有一个 spring 应用程序,我在其中使用 javax.sql.DataSource 连接到 Oracle 数据库。我已将其配置为一个 bean。我用多种方法使用它。但除了在@PreDestroy 方法内部,我从不调用 .close () 方法。

我以多种方式使用它,如下所示:

private void method1(String query){
    Connection conn = dataSource.getConnection();
    try (PreparedStatement st = conn.prepareStatement(query);
        ResultSet rs = st.executeQuery()) {
        //do some task
    }
}

private void method2(String query){
    Connection conn = dataSource.getConnection();
    try (PreparedStatement st = conn.prepareStatement(query);
        ResultSet rs = st.executeQuery()) {
        //do some task
    }
}

PreparedStatement 和 ResultSet 都在 try-with-resources 块中,这将自动关闭它们。我没有将 Connection 放在 try-with-resources 中,因为我想在多个地方使用相同的连接。

明智吗?我只是举了两个例子。事实上,我在 25 种方法中都以这种方式使用它。

关于连接的最佳做法是对一个逻辑事务使用单个连接(这可能是一个简单的 select 或多个 insert/update/select 语句的组合,这些语句应立即执行并取决于每个其他),否则如果您有一堆不相关的查询,最好关闭连接。

请记住,数据库有自己的连接池,因此如果这就是您想要使用单个连接的原因,您可以同时打开多个连接。