【问题标题】:Spring data jpa and JdbcTemplate - Should I close connection?Spring data jpa 和 JdbcTemplate - 我应该关闭连接吗?
【发布时间】:2019-07-14 09:26:47
【问题描述】:

我应该关闭连接还是 Spring 会处理它?

@Autowired
MyRepository myRepository;  

@Autowired
@Qualifier("myJdbc")
JdbcTemplate myJdbc;

@GetMapping("/v1/controlla-abilitazione")
public Set<String> controlloAbilitazione() {
    try {
        Connection conn = myJdbc.getDataSource().getConnection();
        //Here I use previous connection to call an oracle PL/SQL via basic oracle jdbc

        //Should I close connection?
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}

(我知道我可以使用 Spring 来处理 PL/SQL,但是 Spring 没有原生支持 Oracle Type 作为从 PL/SQL 返回)

【问题讨论】:

  • 是的,在这种情况下你应该关闭连接。

标签: oracle spring-boot spring-data-jpa ojdbc


【解决方案1】:

没有尝试过,但是如果您从 Connection 对象执行 SQL 或 PL/SQL 查询,则不会使用 Spring JDBC 功能来执行查询,因此您不应期望 Spring 为您关闭连接。它不知道有关数据源提供程序的活动。
所以Connection.close() 可能是必需的。

这是一个理论,但您可以很容易地检查它。将Connection 存储在bean 的一个字段中,并在方法的开头进行检查。

Connection conn;
@GetMapping("/v1/controlla-abilitazione")
public Set<String> controlloAbilitazione() {
    if (conn != null && !conn.isClosed){
      throw new RuntimeException("Oh it was not closed");
    }
    try {
        conn = myJdbc.getDataSource().getConnection();           
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}

现在一次又一次地调用您的控制器。如果您遇到异常,您就会知道原因。

【讨论】:

    猜你喜欢
    • 2021-11-19
    • 1970-01-01
    • 2011-06-02
    • 2017-02-24
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    相关资源
    最近更新 更多