明明设置了数据库连接池maxidle,为什么数据库连接数会超过它

明明设置了数据库连接池maxidle,为什么数据库连接数会超过它,第1张

兄弟,数据库连接池是一种客户端行为,而不是数据库服务端行为。一个数据库可能会对应很多数据库连接池,你设置你的数据库连接池只是限制你的应用连接数量而已,还会有其他的数据库连接池去连接数据库。

至少9个。

dataSource: 要连接的 datasource (通常我们不会定义在 server.xml)

defaultAutoCommit: 对于事务是否 autoCommit, 默认值为 true

defaultReadOnly: 对于数据库是否只能读取, 默认值为 false

driverClassName:连接数据库所用的 JDBC Driver Class,

maxActive: 可以从对象池中取出的对象最大个数,为0则表示没有限制,默认为8

maxIdle: 最大等待连接中的数量,设 0 为没有限制 (对象池中对象最大个数)

minIdle:对象池中对象最小个数

maxWait: 最大等待秒数, 单位为 ms, 超过时间会丢出错误信息,-1为无限制

password: 登陆数据库所用的密码

Tomcat7.0配置连接池的步骤:

第一步:在Tomcat的配置文件Tomcat7.0\conf\context.xml中添加信息:

<Context>

<Resource

name="jdbc/drp"

type="javax.sql.DataSource"

driverClassName="oracle.jdbc.driver.OracleDriver"

maxIdle="2"

maxWait="5000"

username="drp"

password="drp"

url="jdbc:oracle:thin:@localhost:1521:bjpowernode"

maxActive="4"/>

</Context>

第二步:把配置文件context.xml剪切到webRoot/META-INF中。(若是只有一个项目使用连接池的话,则剪切到使用连接池项目webRoot/META-INF中。若是多个项目都使用连接池,则不进行 *** 作第二步。)

第三步:则在程序中获得连接:

//new DBcP pool

Context ctx=new InitialContext()

//通过JNDI查找DataSource

DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/drp")

conn=ds.getConnection()

其中第一步中的上下文context.xml中的参数的解析如下:

其中的name属性是数据源名称,通常采取jdbc/**.

type属性是数据源方式。

driverClassName属性是驱动程序名称。(此文中是oracle驱动程序)

username,password,数据库名称和密码

url:访问的数据库路径。其中url的内容组成解析上篇博客中已经分析——Oracle安装以及测试Oracle数据库

maxActive属性是并发连接的最大数。设置为0则无限制。

maxWait属性是等待连接的最大连接的时间。

maxIdle属性是连接池中空闲的连接的个数。

上文中的设置的 maxActive="4"说明可以最大连接的个数为4个,再建立连接,则出现异常。

而maxIdle="2"说明当关闭数据库时(不是真正的断开连接,而是归还连接池中)连接池中最大可以有空闲的连接数为2个。

若是再有建立连接,此时若连接池中没有空闲的连接,但是又没有达到maxActive并发的最大连接数,则在连接池中建立连接。

ps:有些教材Tomcat配置连接池,需要在Tomcat/lib中加入驱动包ojbc14.jar.但是自己在Tomcat7.0下配置连接池时,没有加入驱动jar包依然运行正常。

数据库连接池的最大空闲

java的所有的连接池 无论是c3p0、dbcp还是druid,都有一个类似maxWait或者maxIdleTime配置项。具体含义就是当连接长时间没有向服务器发请求的时候,断开这个连接,避免对数据库连接的浪费。这个时间不是随便设的,它的依据是数据库的连接最大空闲时间。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6725451.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存