tomcat jdbc连接池设置

       对于一个简单的数据库应用,由于对于数据库的访问不是很频繁。这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销。但是对于一个复杂的数据库应用,情况就完全不同了。频繁的建立、关闭连接,会极大的减低系统的性能,因为对于连接的使用成了系统性能的瓶颈。
       连接复用。通过建立一个数据库连接池以及一套连接使用管理策略,使得一个数据库连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。
       共享资源。有一个很著名的设计模式:资源池。该模式正是为了解决资源频繁分配、释放所造成的问题的。把该模式应用到数据库连接管理领域,就是建立一个数据库连接池,提供一套高效的连接分配、使用策略,最终目标是实现连接的高效、安全的复用。
       数据库连接池的基本原理是在内部对象池中维护一定数量的数据库连接,并对外暴露数据库连接获取和返回方法。如:外部使用者可通过getConnection 方法获取连接,使用完毕后再通过close方法将连接返回,注意此时连接并没有关闭,而是由连接池管理器回收,并为下一次使用做好准备。

       在java web 应用中使用连接池,当数据库重启或数据库连接超过设置的最大maxAge,数据库会强行断开已有的链接,此时当web程序访问数据库时就会出现错误,大致的错误信息the connection is closed,原因是数据库这边已有的连接强行断开,而连接池中不知道已经断开,还是从连接池取出数据库连接交给程序去执行数据库操作,导致出错。
       与dataSource有关的超时时间有两种,一个是非交互式的最大等待时间 maxAge,另一个是交互式的最大等待时间interactive_time,即数据库连接使用的时间。一般情况下interactive_timeout的设置将要对web 应用没有多大的影响。maxAge的时间设置太小话会导致连接关闭很快,从而使一些持久连接不起作用,反之设置过大,容易造成连接打开时间过长。
       使用tomcat jdbc数据库连接池粗略配置数据库连接池如下:

 

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<!-- 设置每个连接的最大生命周期,数据库连接最大连接时间对应 -->
<!-- 		<property name="maxAge" value="30000"/> -->
		<!-- 最少空闲连接 -->
		<!--<property name="minIdle" value="0" />-->
		<!-- 最大空闲连接 -->
		<property name="maxIdle" value="10" />
		<!-- 最大使用连接 -->
		<property name="maxActive" value="50" />
		<!-- 是否默认提交 -->
		<property name="defaultAutoCommit" value="false" />
		<!-- 在从连接池获取连接、连接到数据库和将连接返回连接池时验证连接的有效性 -->
		<property name="testOnBorrow" value="true" />
		<property name="testOnConnect" value="true" />
		<property name="testOnReturn" value="true" />
		<!-- 连接验证SQL -->
		<property name="validationQuery" value="select 1" />
		<!-- 连接验证有效性的时间间隔,默认为30s -->
		<property name="validationInterval" value="3000" />
	</bean>

       

        maxAge:一个连接最长声明周期,为了最大程度的复用连接,一般和数据库中设置的连接最大时间相同。
        maxIdle:空闲数据库连接的最大数。
        maxActive:活动数据库连接的最大数。数据库连接池中连接由空闲连接和活动连接组成。
        testOnBorrow:从连接池获取连接是否要经过SQL测试,没通过测试则抛弃。需要设置validationInterval和validationQuery属性。
        testOnConnect:在进行数据库连接时是否要经过SQL测试,没通过测试则抛弃。需要设置validationInterval和validationQuery属性。
        testOnReturn:将连接返回到数据库连接池时是否要经过SQL测试,没通过测试则抛弃。需要设置validationInterval和validationQuery属性。
        validationQuery:验证数据库连接时候有效的SQL。
        validationInterval:数据库连接有效性验证的时间间隔,它生效的节点在应用从数据库连接池中获取连接、进行数据库连接和返回连接到连接池的时候。在数据库连接不用时,连接池也不会自动在这个间隔时间对连接进行验证。


        数据库连接池要对数据库连接进行各种验证,验证不通过就抛弃数据库连接。如果连接池设置了minIdle,在验证失败后,当前idle连接数小于minIdle,连接池要获取新的数据库连接填充到空闲连接中。

        按照此种数据库连接验证策略,数据库重启之后最长需等待maxAge时间获取新的数据库连接,或者设置了validationInterval、testOnBorrow、testOnConnect和testOnReturn,则需等待的时常为validationInterval。

        由于连接存在的时常超过validationInterval时,会在获取连接、返回连接和连接数据库时进行有效性验证,所以为了减少性能损耗,只需要设置在从连接池获取连接的时候进行验证即可。

 

你可能感兴趣的:(tomcat)