数据库连接池
来源:互联网 发布:数据分析 量化交易 编辑:程序博客网 时间:2024/05/22 02:03
数据库连接池
1.概述
数据库连接池就是存放数据库连接(Connection)的集合
我们获取一个数据库连接是一个相对很麻烦的过程,如果我们获取一个数据库连接,使用一次以后就给它关闭了,下一次再去使用的时候就要重新创建一个新的数据库连接。
所以我们提出了一个数据库连接池的概念,数据库连接池放的都是数据库连接(Connection)我们在去使用数据库连接时候,不用再去重新创建数据库连接,而是直接从池中获取,使用完的数据库连接,也不是直接销毁,而是要放回到连接池。
2.数据库连接池的常见属性
- 初始连接数量:数据连接池创建以后,保存数据库连接的数量
- 最小空闲连接数:数据库连接池最少得未使用的数据库连接的数量
- 最大空闲连接数:数据库连接池最大闲置连接数,当闲置连接数满了以后,将不会有其他连接进入池
- 每次增加连接数:当数据库连接都被占用以后,一次性增加的数据库连接的个数
- 最大连接数:数据库连接池的最大容量,当最大连接数饱和了,则不再创建新的数据库连接
- 最大等待时间:当数据库连接池饱和以后,等待获取数据库连接的时间
3.常见的数据库连接池
DBCP
- DBCP是Apache出品的一款数据库连接
- DBCP依赖于commons-pool
- 使用DBCP需要导入两个jar包:
- commons-dbcp-1.4.jar
- commons-pool-1.5.5.jar
当我们通过数据库连接池获取数据库连接以后,我们所获取到数据库连接已经不是我们熟悉的那个Connection
数据库连接池对Connection对象进行了包装,它修改Connection的close()方法,再去调用close()数据库连接将不会真的关闭,而是要放回到数据库连接池中,供其他线程使用。核心类:
BasicDataSourceFactory
C3P0(重点)
- C3P0使用的是XML作为配置文件
- 使用c3p0需要导入一个jar包:
c3p0-0.9.1.2.jar - 导入c3p0的配置文件:
1.配置文件的名字:c3p0-cofig.xml
2.配置文件要求放到类路径下(src) - 核心类:
ComboPooledDataSource
注意: DataSource就相当于池子,我们的数据库连接都是从DataSource中获取的,如果程序中有多个DataSource的实例,那么我们说你还不如不用数据库连接池。所以我们的DataSource在项目中应该只有一个实例。
引入外部属性文件
jdbc.properties文件:
jdbc.username=rootjdbc.password=123456jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/test
在applictionContext.xml配置文件上加入
<context:property-placeholder location="classpath:jdbc.properties"/>
在目标属性上加@Value注解
@Value(“${jdbc.user}”)
private String username;
在applictionContext.xml配置文件上配置:
<!-- 根据外部属性文件中的信息配置数据源 --> <bean id="comboPooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="user" value="${jdbc.user}"></property> <property name="password" value="${jdbc.passowrd}"></property> <property name="jdbcUrl" value="${jdbc.url}"></property> <property name="driverClass" value="${jdbc.driver}"></property> </bean>
在单元测试文件上就可以使用数据库连接池的连接了
ComboPooledDataSource bean = ioc.getBean(ComboPooledDataSource.class); Connection connection = bean.getConnection(); System.out.println(connection); Statement st = connection.createStatement(); ResultSet rs = st.executeQuery("select * from stu"); while(rs.next()){ String string = rs.getString("name"); String string2 = rs.getString("school"); System.out.println(string+"==="+string2); }
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 数据库连接池
- 普通进程的调度策略
- MySQL的GTID复制比传统复制的优势
- 第二阶段_第二小节_C#调试
- JavaSe——5、java常用类
- Android Api demo系列(12) (App>Alert Dialogs)
- 数据库连接池
- 第二阶段_第三小节_C#基础
- Ubuntu最简单的方式安装NVIDIA显卡驱动和cuda工具
- DLL介绍和使用
- 第二阶段_第四家小节_C#基础2
- 补充带有注解的查询
- 第二阶段_第五小节_C#基础3
- mybatis
- adalm pluto 学习(一)