目录
什么是连接池
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。
为什么要使用连接池
- 数据库连接:每次都要打卡和释放连接,造成系统性能低下,占用时间
- 数据库连接池:建立足够的连接,这些连接组成连接池。程序对池中的内容进行申请连接、使用和释放
- 对于多于连接池中连接数的并发请求,应该在请求队列中排队等待。
- 并且应用程序可以根据池中连接的使用率,动态增加或减少池中的连接数。
连接池技术尽可能多地重用了消耗内存地资源,大大节省了内存,提高了服务器地服务效率,能够支持更多的客户服务。通过使用连接池,将大大提高程序运行效率,同时,我们可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。
c3p0连接池
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。
c3p0官网和api下载
下载
列:使用线程解决:多个线程访问共享变量不互相影响
使用包junit-4.8.2.jar
public class TestThreadLocal {
//fun1相当于主线程
@Test
public void fun1(){
ThreadLocal<String> tl=new ThreadLocal<String>();
tl.set("aaa");//
String temp=tl.get();
//匿名类 开启一个线程
new Thread(){
@Override
public void run() {
// TODO Auto-generated method stub
tl.set("bbb");
System.out.println(Thread.currentThread().getName()+"===="+tl.get());
}
}.start();
System.out.println(Thread.currentThread().getName()+"****"+temp);
}
}
结果:
列:使用连接池
mysql的实现
tb_user表
tb_address表(地址表)
导包与新建c3p0-config.xml文件
导包
命名必须为c3p0-config.xml,
必须放在src目录下,c3p0包会默认加载src目录下的c3p0-config.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- 这是默认配置信息 -->
<default-config>
<!-- 连接四大参数配置 -->
<property name="jdbcUrl">jdbc:mysql://localhost:3306/shopping
</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">root</property>
<!-- 池参数配置 -->
<property name="acquireIncrement">3</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">2</property>
<property name="maxPoolSize">10</property>
</default-config>
</c3p0-config>
新建JDBC Util工具类Dbutils.java
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class Dbutils {
private static DataSource ds=new ComboPooledDataSource();//拿到数据源
//解决线程同步
private static ThreadLocal<Connection> tl=new ThreadLocal<Connection>();
//获取连接池
public static DataSource getDataSource(){
return ds;
}
/**
* 获取连接