spring学习笔记(17)数据库配置[1]spring数据连接池详解
来源:互联网 发布:树莓派上编程 编辑:程序博客网 时间:2024/05/22 06:18
数据连接池
在spring中,常使用数据库连接池来完成对数据库的连接配置,类似于线程池的定义,数据库连接池就是维护有一定数量数据库连接的一个缓冲池,一方面,能够即取即用,免去初始化的时间,另一方面,用完的数据连接会归还到连接池中,这样就免去了不必要的连接创建、销毁工作,提升了性能。当然,使用连接池,有一下几点是连接池配置所考虑到的,也属于配置连接池的优点,而这些也会我们后面的实例配置中体现:
1、 如果没有任何一个用户使用连接,那么那么应该维持一定数量的连接,等待用户使用。
2、 如果连接已经满了,则必须打开新的连接,供更多用户使用。
3、 如果一个服务器就只能有100个连接,那么如果有第101个人过来呢?应该等待其他用户释放连接
4、 如果一个用户等待时间太长了,则应该告诉用户,操作是失败的。
在spring中,常用的连接池有:jdbc,dbcp,c3p0,JNDI4种,他们有不同的优缺点和适用场景。其中,spring框架推荐使用dbcp,hibernate框架推荐使用c3p0。经测试发现,c3p0与dbcp相比较,c3p0能够更好的支持高并发,但是在稳定性方面略逊于dpcp。
下面对几个连接池进行示例配置:
- jdbc连接池配置示例
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"> </property> <property name="url" value="jdbc:mysql://localhost:3306/yc" /> <property name="username" value="yc"></property> <property name="password" value="yc"></property></bean>
DriverManagerDataSource没有实现连接池化连接的机制,每次调用getConnection()获取新连接时,只是简单地创建一个新的连接。所以,一般这种方式常用于开发时测试,不用于生产。
- dbcp连接池配置示例
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><!--设置为close使Spring容器关闭同时数据源能够正常关闭,以免造成连接泄露 --> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/yc" /> <property name="username" value="yc" /> <property name="password" value="yc" /> <property name="defaultReadOnly" value="false" /><!-- 设置为只读状态,配置读写分离时,读库可以设置为true --> <!-- 在连接池创建后,会初始化并维护一定数量的数据库安连接,当请求过多时,数据库会动态增加连接数, 当请求过少时,连接池会减少连接数至一个最小空闲值 --> <property name="initialSize" value="5" /><!-- 在启动连接池初始创建的数据库连接,默认为0 --> <property name="maxActive" value="15" /><!-- 设置数据库同一时间的最大活跃连接默认为8,负数表示不闲置 --> <property name="maxIdle" value="10"/><!-- 在连接池空闲时的最大连接数,超过的会被释放,默认为8,负数表示不闲置 --> <property name="minIdle" value="2" /><!-- 空闲时的最小连接数,低于这个数量会创建新连接,默认为0 --> <property name="maxWait" value="10000" /><!-- 连接被用完时等待归还的最大等待时间,单位毫秒,超出时间抛异常,默认为无限等待 --></bean>
以上参数是我们在实际开发中常用到的。关于分析都在注释里。
- c3p0连接池配置示例
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/yc" /> <property name="user" value="yc" /> <property name="password" value="yc" /></bean>
它的常用配置属性见下表:
4. JNDI连接池配置示例
如果我们需要使用远程服务器(如WebLogic等)自带的数据源时,常使用这种配置。JNDI在spring中有两种配置方式,一种是利用spring内置的JndiObjectFactoryBean。
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:comp/env/jdbc/yc/> </bean>
另一种则是利用Spring为获取j2ee资源提供的一个jee命名空间:
<!--1.现在xmlns下添加: jee=http://www.springframework.org/schema/jee 2. 然后在xsi:schemaLocation下添加: http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd"> 3. 然后我们可以直接使用<jee:jndi-lookup>标签完成配置 --> <jee:jndi-lookup id="dataSource" jndi-name=" java:comp/env/jdbc/yc"/>
在下一篇文章,我会示例如何通过JNDI在我们的应用服务器上配置多数据源,然后在我们的web项目中进行访问。同时,我们会结合AOP简单模拟主从分库的读写分离实例。通过针对我们的DAO层的不同访问数据库方法来完成我们的读写分离。
- spring学习笔记(17)数据库配置[1]spring数据连接池详解
- spring连接池配置详解
- spring连接池配置详解
- spring连接池配置详解
- spring连接池配置详解
- Spring连接池配置详解
- Spring 配置数据连接池
- spring配置连接数据库
- Spring的JNDI数据源连接池配置学习笔记
- spring配置详解-连接池配置
- spring配置详解-proxool连接池配置
- spring配置详解-proxool连接池配置
- spring配置详解-连接池配置
- spring学习笔记一 spring web.xml文件配置详解
- spring.xml配置数据连接池
- spring配置hibernate 数据源(数据连接池)
- 使用Spring连接数据库,配置JSP json数据
- Spring配置数据库的连接
- Python,实现全排列的打印
- Android 自定义控件之第一讲:attr format 取值类型
- 数组形参
- Unity实现残影特效
- Android——LayoutParams的用法
- spring学习笔记(17)数据库配置[1]spring数据连接池详解
- 15教育技术冯志超
- CMake一步步入门
- XP下vs2008-qt4.8.6编译Qgis:QwtPolar编译
- 安装cvxpy时解决ImportError: No module named multiprocessing
- JDBC学习笔记(五):模拟银行转账
- java 六大原则
- The method onClick(View) of type MainActivity must override or implement a supertype method
- java多线程编程