博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring学习笔记(17)数据库配置[1]spring数据连接池详解
阅读量:7197 次
发布时间:2019-06-29

本文共 1695 字,大约阅读时间需要 5 分钟。

数据连接池

在spring中,常使用数据库连接池来完成对数据库的连接配置,类似于线程池的定义,数据库连接池就是维护有一定数量数据库连接的一个缓冲池,一方面,能够即取即用,免去初始化的时间,另一方面,用完的数据连接会归还到连接池中,这样就免去了不必要的连接创建、销毁工作,提升了性能。当然,使用连接池,有一下几点是连接池配置所考虑到的,也属于配置连接池的优点,而这些也会我们后面的实例配置中体现:

1、 如果没有任何一个用户使用连接,那么那么应该维持一定数量的连接,等待用户使用。
2、 如果连接已经满了,则必须打开新的连接,供更多用户使用。
3、 如果一个服务器就只能有100个连接,那么如果有第101个人过来呢?应该等待其他用户释放连接
4、 如果一个用户等待时间太长了,则应该告诉用户,操作是失败的。

在spring中,常用的连接池有:jdbc,dbcp,c3p0,JNDI4种,他们有不同的优缺点和适用场景。其中,spring框架推荐使用dbcp,hibernate框架推荐使用c3p0。经测试发现,c3p0与dbcp相比较,c3p0能够更好的支持高并发,但是在稳定性方面略逊于dpcp。

下面对几个连接池进行示例配置:

  1. jdbc连接池配置示例

DriverManagerDataSource没有实现连接池化连接的机制,每次调用getConnection()获取新连接时,只是简单地创建一个新的连接。所以,一般这种方式常用于开发时测试,不用于生产。

  1. dbcp连接池配置示例

以上参数是我们在实际开发中常用到的。关于分析都在注释里。

  1. c3p0连接池配置示例

它的常用配置属性见下表:

属性 说明 默认值
acquireIncrement 当连接池中的连接用完时,C3P0一次性创建新连接的数目 5
acquireRetryAttempts 定义在从数据库获取新连接失败后重复尝试获取的次数 30
checkoutTimeout 当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒 0
initialPoolSize 初始化时创建的连接数,应在minPoolSize与maxPoolSize之间取值 3
maxIdleTime 最大空闲时间,超过空闲时间的连接将被丢弃。为0或负数则永不丢弃 0
maxPoolSize 连接池中保留的最大连接数 15
numHelperThreads C3P0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能,通过多线程实现多个操作同时被执行 3

4. JNDI连接池配置示例

如果我们需要使用远程服务器(如WebLogic等)自带的数据源时,常使用这种配置。JNDI在spring中有两种配置方式,一种是利用spring内置的JndiObjectFactoryBean。

另一种则是利用Spring为获取j2ee资源提供的一个jee命名空间:

在下一篇文章,我会示例如何通过JNDI在我们的应用服务器上配置多数据源,然后在我们的web项目中进行访问。同时,我们会结合AOP简单模拟主从分库的读写分离实例。通过针对我们的DAO层的不同访问数据库方法来完成我们的读写分离。

转载地址:http://gmkum.baihongyu.com/

你可能感兴趣的文章
UI- font 字体设置
查看>>
彻底搞懂 call() 和 apply() 方法
查看>>
[转] 现实•理论•证据──谈如何做研究和写论文
查看>>
第一二次Java实训
查看>>
http协议详解2
查看>>
linux下的工作模型以及Nginx工作原理
查看>>
利用Python进行文章特征提取(一)
查看>>
骆家辉 干的好事,忽悠清华大学,
查看>>
,非你莫属,
查看>>
第五周作业
查看>>
了解Session的本质
查看>>
Sass 入门 (一) 安装Sass
查看>>
进程与线程的一个简单解释
查看>>
【HDOJ】3789 奥运排序问题
查看>>
【Linux】鸟哥的Linux私房菜基础学习篇整理(十二)
查看>>
20-黑马程序员------OC 语言学习笔记---多态
查看>>
STC12C5A60S2 双串口通信
查看>>
Arrow function restore
查看>>
伸缩放大的js
查看>>
ServiceStack Redis客户端的bug
查看>>