我使用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"/>
答案 0 :(得分:0)
从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
表示新连接将等待连接可用 - 没有超时。