Spring 数据 jpa 和 JdbcTemplate - 我应该关闭连接吗?

Spring data jpa and JdbcTemplate - Should I close connection?

我应该关闭连接还是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 没有对来自 [=16 的 return 的 Oracle Type 的原生支持=])

未尝试,但如果您从 Connection 对象执行 SQL 或 PL/SQL 查询,则不会使用 Spring JDBC 功能执行您的查询,因此您不应期望 Spring 会为您关闭连接。它不知道数据源提供者activity。
所以 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;
}

现在一次又一次地调用你的控制器。如果你得到异常,你知道为什么。