嗨,我有一个应用程序,它的连接总是打开的,每当我打开时,它的连接数就会增加。在浏览器中刷新应用程序。我正在使用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
1条答案
按热度按时间bqucvtff1#
看起来每次请求连接时都要创建一个新的数据源,而不是请求数据源的单个示例进行连接并让它处理池。
使数据源成为Bean并重用它。