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

woobm2wo  于 2024-01-06  发布在  Spring
关注(0)|答案(1)|浏览(149)

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

  1. @Override
  2. public Connection getConnection() throws SQLException {
  3. Connection con = null;
  4. DB2ConnectionPoolDataSource pd = null;
  5. try{
  6. pd = new DB2ConnectionPoolDataSource();
  7. pd.setDriverType......
  8. PooledConnection pc = new PooledConnection();
  9. con = ((Db2PooledConnection)pc).getDb2Connection(.....);
  10. catch (Exception e){
  11. }
  12. return con;
  13. }

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

  1. @Configuration
  2. public class DSconfig{
  3. @Bean
  4. public DB2ConnectionPoolDataSource poolDS(){
  5. poolDS.setDriver("testname");
  6. poolDS.setServerName("test");
  7. ....
  8. return poolDS;
  9. }
  10. }


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

  1. public class gettingConnection({
  2. @Autowired
  3. private DB2ConnectionPoolDataSource ds;
  4. @Override
  5. public Connection getConnection() throws exception{
  6. Connection con = null;
  7. PooledConnection pc = new PooledConnection();
  8. con = (Db2PooledConnection)pc).getDb2Connection(...);
  9. return con;
  10. }


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

bqucvtff

bqucvtff1#

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

相关问题