![](/img/trans.png)
[英]In reactive programming how to elegantly close the connection in the database connection pool
[英]Close database connection in connection pool
我正在使用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(); }
我的怀疑:
我的疑问是,即使我正在关闭连接(conn.close()),在MySQL 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文档中 ,有些初始值与您在资源配置中设置的初始值不一致。
minIdle
(默认为10) initialSize
(默认为10) 如果您查看带有上述默认值的init()
方法的代码,并使用
maxActive = "1"
maxIdle = "0"
您最终将得到:
maxActive = "1"
maxIdle = "1"
minIdle = "1"
initialSize = "1"
这是一个由1个连接组成的池,该池的目的是保持一些(取决于config)对传入请求的连接处于打开状态。 调用close()
只会将连接从繁忙队列传递到空闲队列。
如果您真的根本不需要池 ,则应尝试显式设置:
maxActive = "1"
maxIdle = "0"
minIdle = "0"
initialSize = "0"
请注意, maxWait = -1
意味着新的连接将等待直到连接可用-没有超时。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.