如何关闭ConnectionPool使用java、springboot、IBM DB2ConnectionPoolDataSource执行多个查询后

woobm2wo  于 5个月前  发布在  Spring
关注(0)|答案(1)|浏览(59)

嗨,我有一个应用程序,它的连接总是打开的,每当我打开时,它的连接数就会增加。在浏览器中刷新应用程序。我正在使用IBM DB2ConnectionPoolDataSource进行连接池支持。应用程序在springboot项目中的嵌入式tomcat服务器上运行。任何关于如何关闭连接池的代码示例都很受欢迎。当我启动服务器时,我有多个查询执行。如果我这样做,connection.close(),当下一个查询准备执行时,它会在连接关闭时给我sqlException。我想在所有查询执行后关闭连接。不确定我必须执行connection.close()的代码的哪一部分。下面是我正在做的事情的示例。提前感谢。
代码示例:

@Override
public Connection getConnection() throws SQLException {
    Connection con = null;
    DB2ConnectionPoolDataSource pd = null;
    try{
        pd = new DB2ConnectionPoolDataSource();
        pd.setDriverType......
        PooledConnection pc = new PooledConnection();
        con = ((Db2PooledConnection)pc).getDb2Connection(.....);
    catch (Exception e){
    }
    return con;
}

字符串
如果我在catch之后的finally块中执行connection.close(),我会得到一个sqlException,因为连接已经关闭,下一个查询将被执行。
新代码:

@Configuration
   public class DSconfig{
    @Bean
    public DB2ConnectionPoolDataSource poolDS(){
    poolDS.setDriver("testname");
    poolDS.setServerName("test");
    ....
    return poolDS;
  }
}


另一个类,我自动连接bean:

public class gettingConnection({
   
@Autowired
private DB2ConnectionPoolDataSource ds;
  @Override
  public Connection getConnection() throws exception{
Connection con = null;
PooledConnection pc = new PooledConnection();
con = (Db2PooledConnection)pc).getDb2Connection(...);
return con;
}


当我启动我的tomcat服务器时,它抛出空指针异常:Cannot invoke“java.sql.Connection.close()”because“connection”is null

bqucvtff

bqucvtff1#

看起来每次请求连接时都要创建一个新的数据源,而不是请求数据源的单个示例进行连接并让它处理池。
使数据源成为Bean并重用它。

相关问题