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

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

我应该关闭连接还是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,但是从PL / SQL返回时,Spring没有对Oracle Type的本机支持)

oracle spring-boot spring-data-jpa ojdbc
1个回答
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;
}

现在调用您的控制器一次又一次。如果你得到例外,你知道为什么。

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