gpt4 book ai didi

java - 关闭连接池中的数据库连接

转载 作者:行者123 更新时间:2023-11-30 22:45:27 24 4
gpt4 key购买 nike

我正在使用 JDBC 连接池与 mysql 服务器建立连接。

下面是我的代码片段

  try {
InitialContext initialContext = new InitialContext();
Context context = (Context) initialContext.lookup("java:comp/env");
DataSource ds = (DataSource) context.lookup("connpool");
Connection conn = ds.getConnection();
//some query is executed
}
catch(SQLException ex)
{ }
finally { conn.close(); }

我的疑问:

我的疑问是即使我在 MySQL 中关闭连接(conn.close())show processlist 命令显示连接。

如果我向 servlet 发送更多请求,show processlist 中的连接数也会增加,

此连接何时关闭。

为什么我担心意味着它达到了最大连接数它会显示错误。

我的连接池配置是:

          <Resource name="connpool" auth="Container" 
type="javax.sql.DataSource"
maxActive="1" maxIdle="0"
maxWait="-1"
username="xxxxx"
password="xxxxx"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/govsocial"/>

最佳答案

来自 tomcat documentation ,有些初始值与您在资源配置中设置的设置不一致。

  • minIdle(默认为 10)
  • initialSize(默认为 10)

如果你有一个 look at the code for init() method ,使用上述默认值和您的配置

  • maxActive = "1"
  • maxIdle = "0"

你最终会得到:

  • maxActive = "1"
  • maxIdle = "1"
  • minIdle = "1"
  • initialSize = "1"

这是一个包含 1 个连接的池,池的目的是为传入请求保持一些(取决于配置)连接打开。调用 close() 只会将连接从 busy 队列传递到 idle 队列。

如果你真的想要没有池,你应该尝试明确设置:

  • maxActive = "1"
  • maxIdle = "0"
  • minIdle = "0"
  • initialSize = "0"

请注意,maxWait = -1 表示新连接将等待直到连接可用 - 没有超时。

关于java - 关闭连接池中的数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29752138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com