什么事数据库连接池
- 数据库连接池是程序启动的时候创建足够的数据库连接,将这些 连接放到一个连接池中,如果程序要使用,动态的由程序申请,使用,释放
传统的数据库连接方式和数据库连接池的区别
- 传统方法
- 加载驱动程序
- 通过jdbc建立连接
- 使用sql语句操作数据
- 关闭连接
- 数据库连接池方法
- 程序初始化时创建连接池
- 向连接池申请链接
- 使用sql操作数据库
- 归还连接
- 程序退出时,释放所有的资源
连接池的优势
- 减少链接创建时间:连接池中的连接是已经创建号的,可以重复使用,获取后可以直接访问数据库,因此减少了连接创建的时间
- 简化编程模式:每一个线程使用连接池的连接,就像使用自己的连接一样,可以操作数据
- 控制 资源的使用:如果没有连接池,那么系统每次需要一个连接就需要,创建一个,不使用了,还要销毁,这样重复的创建影响系统的性能,和资源的浪费。
连接池的原理
- 连接池建立的开始,在系统的初始化的时候,会建立连接池,连接池内有设置的接个连接对象,当需要使用的使用,可以从连接池中获取
- 连接池的管理:
- 当用户请求的一个连接对象的时候,连接池,会先从连接池中查看,有没有空闲连接,如果有,那么就分给客户,如果没有,要查看是连接数量是否达到最大的连接数,如果没有达到,那么就创建一个给客户,如果达到了,那么就让客户等待,如果超过等待时间,那么抛出异常。
- 当客户释放连接的时候,判断这个连接是否超过了使用的次数,如果超过了,那么就销毁,如果没有,那么就在放入连接池,重复使用。
- 关闭连接池:当用户关闭程序的时候,销毁连接池中的所有的额连接,这个过程正好与创建连接池相反。
使用dbcp链接池获取连接对象
- 创建Java项目
- 导入jar包
- commons-dbcp
- commons-pool
- 方法
@Test
public void test(){
// 创建连接池对象
BasicDataSource data = new BasicDataSource();
// 设置四大参数
data.setDriverClassName("com.mysql.jdbc.Driver");
data.setUrl("jdbc:mysql://localhost:3306/mydatabase1");
data.setUsername("root");
data.setPassword("root");
// 设置连接池特点
data.setMaxActive(20);
data.setMinIdle(3);
data.setInitialSize(5);
//获取连接对象
Connection con = null;
try {
con = data.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(con.getClass().getName());
}
使用c3p0连接池获取连接
- 导入jar 包
- c3p9-jar
- mchange-commons-jar
方法
不使用配置文件,手动配置
@Test public void test() throws PropertyVetoException, SQLException{ // 创建连接池对象 ComboPooledDataSource com = new ComboPooledDataSource(); // 设置四大参数 com.setDriverClass("com.mysql.jdbc.Driver"); com.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase1"); com.setUser("root"); com.setPassword("root"); // 设置连接池属性 com.setMaxPoolSize(200); com.setMinPoolSize(2); com.setInitialPoolSize(10); com.setAcquireIncrement(2); // 获取连接对象 Connection con = com.getConnection(); System.out.println(con.getClass().getName()); con.close(); }
- 使用配置文件,自动配置
- 在src目录下创建c3p0-config.xml文件
- 配置文件的格式
- 直接创建连接值对象,获取连接
- 创建连接池对象的时候,传入指定配置名称
- 方式的区别
- 使用配置文件可以很好的配置练级池,效率很高,值的推荐使用
- 手动配置的,后期不容易修改。
tomcat连接池配置
JNDI
- Java 命名和目录接口
- jndi的作用是在服务器 上配置资源,然后通过统一的方式来 获取资源
- 这里的资源就是连接池,这样,整个项目就可以通过统一的方式来获取连接池对象了
tomcat 配置JNDI资源
- 在tomcat目录下的conf-Catalina-创建文件,名字是:==项目名.xml 文件==
- 格式:
- name 指定资源的名称,这个名称可以自定义,在 获取资源的时候需要使用这个名称
- factory 用来创建资源的工厂,这个值一般是固定的,不用修改
- type 资源类型,给出的类型应该是我们要连接的数据库的连接池的类型
- bar :表示资源的属性,如果资源存在名为bar的属性,那么就配置bar的值
获取资源
配置资源的目的是为了获取资源,只要启动了tomcat,那么就可以在项目中的任何类中通过JNDI的方式获取资源了