数据库连接池
- 在系统初始化时准备一定数量的连接
- 使用时进行请求,使用后归还
好处:避免频繁创建和销毁请求,提高响应速度
一般,不会自己写数据库连接池,而是采用第三方数据库厂商的:比如C3P0和阿里巴巴的Druid(德鲁伊)。
注意:使用第三方数据库连接池仍然要导入对应版本的mysql的jar包
在javax.sql下提供了一个DataSource接口来制定标准。
C3P0
1、配置pom.xml
c3p0有两个jar包
<dependency>
<groupId>com.mchange</groupId>
<artifactId>mchange-commons-java</artifactId>
<version>0.2.12</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
2、配置文件
两种形式:xml和properties均可,建议命名为c3p0-config.xml和c3p0.properties。有时候测试会默认加载,但有时加载无效。可以考虑直接指定。
简单来说就是配置四个属性:user、password、driverClass、jdbcUrl
(1)c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="user">root</property>
<property name="password">3145tj</property>
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/study?useSSL=false&serverTimezone=UTC&characterEncoding=utf8</property>
</default-config>
</c3p0-config>
(2)c3p0.properties
user=root
password=3145tj
driverClass=com.mysql.cj.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/study?useSSL=false&serverTimezone=UTC&characterEncoding=utf8
3、主要代码
DataSource dataSource = new ComboPooledDataSource();
Connection connection = dataSource.getConnection();
4、不用配置文件,直接代码设置相关属性
DataSource dataSource = new ComboPooledDataSource();
((ComboPooledDataSource) dataSource).setDriverClass("");
((ComboPooledDataSource) dataSource).setUser("");
((ComboPooledDataSource) dataSource).setPassword("");
((ComboPooledDataSource) dataSource).setJdbcUrl("");
Connection connection = dataSource.getConnection();
spring配置
<!-- 配置c3p0连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 注入属性值 -->
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql:///spring_day03"></property>
<property name="user" value="root"></property>
<property name="password" value="root"></property>
</bean>