1、连接池简述及原理
没有使用连接池时:
使用连接池时:
市面上常见的几种连接池:
DBCP连接池、C3p0连接池、Druid连接池(阿里)
DBCP连接池和c3p0连接池的对比:
Dbcp:效率高,但是安全性一般
C3p0:安全性很高,效率偏低
1.2、DBCP连接池
简述
DBCP也是一个开源的连接池,是Apache Common成员之一,在企业开发中也比较常见,tomcat内置的连接池。
DBCP连接池目前市面上极为高效的连接池。
DBCP连接池一秒钟可以创建并传递10万个左右的连接对象。
DBCP安全性并不高,有可能在高速运转丢失连接数据
导入jar包
配置文件导入
配置文件名称:*.properties
配置文件位置:可存放任意目录,但开发建议src根目录
配置文件内容:properties尽量不要在eclipse中编写中文,容易乱码。如果需要写入中文,建议使用记事本修改内容,可以解决中文乱码问题
必须项 driverClassName 驱动路径
url 数据库链接路径
username 数据库用户名,一般为root
password 数据库密码
基本项 maxActive 连接池中 最大连接数量如果设置了50,代表最多有50个连接。
50个连接被分配出去,50个连接未归还,来第51个线程获取连接,这个线程就会进行等待
minIdle 最小空闲连接 如果连接池有一段时间未有线程来访问,这时连接池就是空闲状态。接池最少的连接保有量
maxIdle 最大空闲连接连接池最大的连接保有量
initialSize 初始化连接连接池在创建之初,所拥有的连接数量
优化配置(扩展) logAbandoned 连接被泄露时是否打印
removeAbandoned 是否自动回收超时连接
removeAbandonedTimeout 超时时间(以秒数为单位)
maxWait 超时等待时间以毫秒为单位
timeBetweenEvictionRunsMillis 在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位 30000
numTestsPerEvictionRun 在每次空闲连接回收器线程(如果有)运行时检查的连接数量 10
minEvictableIdleTimeMillis 连接在池中保持空闲而不被空闲连接回收器线程
编写连接池工具
public class DbcpUtils {
private static DbcpUtils dbcpUtils;
private static DataSource ds;
private DbcpUtils(){
try {
Properties properties=new Properties();
InputStream is=DbcpUtils.class.getResourceAsStream("dbcpconfig.properties");
properties.load(is);
ds=BasicDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
public static DbcpUtils getInstance(){
if(dbcpUtils==null){
synchronized (DbcpUtils.class){
if(dbcpUtils==null){
dbcpUtils=new DbcpUtils();
}
}
}
return dbcpUtils;
}
//提供连接方法
public Connection getConnection() throws SQLException {
return ds.getConnection();
}
}
1.3、C3P0连接池
简述
C3P0开源免费的连接池!目前使用它的开源项目有:Spring、Hibernate(mybatis)等。
spring全家桶:spring、springmvc、springdata、springboot、springCloud
项目分成:(MVC模式)
Web:springmvc
业务层:service
dao层:专门和数据库打交道
使用第三方工具需要导入jar包,c3p0使用时还需要添加配置文件 c3p0-config.xml
导入jar包
配置文件引入
配置文件名称:c3p0-config.xml (固定)
配置文件位置:src (类路径)
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- 默认配置,如果没有指定则使用这个配置 -->
<default-config>
<!-- 四项基本配置 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://IP地址和端口/数据库</property>
<property name="user">root</property>
<property name="password">root</property>
<!-- 当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出
SQLException,如设为0则无限期等待。单位毫秒。Default: 0 -->
<property name="checkoutTimeout">30000</property>
<!--隔多少秒检查连接池的空闲连接,0表示不检查-->
<property name="idleConnectionTestPeriod">30</property>
<!-- 初始化连接数 -->
<property name="initialPoolSize">10</property>
<!-- 连接的最大空闲时间,默认为0秒、不会关闭任何连接。设置30秒,30秒到期后,
连接若未使用就会被关闭 -->
<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>
<!-- 命名的配置 -->
<named-config name="name">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://IP地址和端口/数据库</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="acquireIncrement">5</property>
<property name="initialPoolSize">20</property>
<property name="minPoolSize">10</property>
<property name="maxPoolSize">40</property>
<property name="maxStatements">0</property>
<property name="maxStatementsPerConnection">5</property>
</named-config>
</c3p0-config>
编写连接池工具
public class C3p0Utils {
private static DataSource ds=new ComboPooledDataSource("name");
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
}
DBUtils工具
DBUtils工具简述及导入
DBUtils是java编程中的数据库操作实用工具,小巧简单实用。
DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。
Dbutils三个核心功能介绍
QueryRunner中提供对sql语句操作的API.(CRUD增删改查)
ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法(事务)
导入一系列jar包:
DBUtils核心类-QueryRunner创建