在并发项目中,使用数据库连接池
数据源,一般指javax.sql.DataSource,他可以有各种的各种不同实现,包含连接池和连接池管理,有时也直接叫他数据库连接池。
数据库连接池简介
数据库连接池在项目启动初始化时,直接创建对应的数据库连接,并将其作为对象存储在内存中。当用户访问时,不必创建新的数据库连接,而是直接使用空闲的数据库连接对象,使用完毕再将其释放,但不会断开连接。
连接池使用的优点:
资源复用
性能更优
更好的资源分配管理
统一配置,防止废连接
常用数据库连接池:
Spring框架自带的DriverManagerDataSource
阿里巴巴数据源Druid
c3p0连接池
DriverManagerDataSource
xml配置: ApplicationContext.xml
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<!-- Connection Info -->
<property name="driverClassName" value="$${jdbc.driver}" />
<property name="url" value="$${jdbc.url}" />
<property name="username" value="$${jdbc.username}" />
<property name="password" value="$${jdbc.password}" />
<!-- Connection Pooling DBCP -->
<property name="initialSize" value="5" />
<property name="maxActive" value="$${jdbc.pool.maxActive}" />
<!-- 最大连接数 0为无限制 -->
<property name="maxWait" value="60000" />
<!-- 最大连接等待时间 -1为无限制 -->
<property name="minIdle" value="1" />
<property name="maxIdle" value="$${jdbc.pool.maxIdle}" />
<!-- 最大空闲连接数 0为无限制 -->
<property name="timeBetweenEvictionRunsMillis" value="30000" />
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="poolPreparedStatements" value="true" />
<property name="removeAbandoned" value="true" />
<!-- 回收超过5分钟的连接(秒) -->
<property name="removeAbandonedTimeout" value="300" />
<!-- 防止 mysql 超时 -->
<property name="validationQuery" value="SELECT 1" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="logAbandoned" value="true" />
</bean>
.properties略
c3p0连接池
配置文件c3p0-config.xml
<c3p0-config> <default-config> <property name="automaticTestTable">con_test</property> <property name="checkoutTimeout">30000</property> <property name="idleConnectionTestPeriod">30</property> <property name="initialPoolSize">10</property> <!-- 超过多长时间连接自动销毁,默认为0,即永远不会自动销毁 --> <property name="maxIdleTime">30</property> <property name="maxPoolSize">100</property> <property name="minPoolSize">10</property> <property name="maxStatements">200</property> <user-overrides user="test-user"> <property name="maxPoolSize">10</property> <property name="minPoolSize">1</property> <property name="maxStatements">0</property> </user-overrides> </default-config> <!-- This app is massive! --> <named-config name="intergalactoApp"> <!-- 声明当连接池中连接耗尽时再一次新生成多少个连接,默认为3个 --> <property name="acquireIncrement">50</property> <!--当连接池启动时,初始化连接的个数,必须在minPoolSize~maxPoolSize之间,默认为3 --> <property name="initialPoolSize">100</property> <!-- 任何时间连接池中保存的最小连接数,默认3 --> <property name="minPoolSize">50</property> <!-- 在任何时间连接池中所能拥有的最大连接数,默认15 --> <property name="maxPoolSize">1000</property> <!-- intergalactoApp adopts a different approach to configuring statement caching --> <property name="maxStatements">0</property> <property name="maxStatementsPerConnection">5</property> <user-overrides user="master-of-the-universe"> <property name="acquireIncrement">1</property> <property name="initialPoolSize">1</property> <property name="minPoolSize">1</property> <property name="maxPoolSize">5</property> <property name="maxStatementsPerConnection">50</property> </user-overrides> </named-config> </c3p0-config>
相关参数的选择
配置连接池时,应合理配置相关参数。
maxActive:最大活动连接,一般等于应用并发量。


2018-12-02鱼鱼