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

问题描述 投票:0回答:1

我有一个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种方法中以这种方式使用它。

java spring spring-boot prepared-statement datasource
1个回答
1
投票

关于连接的最佳实践是对一个逻辑事务使用单个连接(这可能是一个简单的选择,或者可能是多个插入/更新/选择语句的组合,应立即执行并相互依赖),否则,如果有一堆无关的查询,最好关闭连接。

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

© www.soinside.com 2019 - 2024. All rights reserved.