1.遇到的问题-引出连接池
2.连接池思想
3.连接池的概述
在Java中,连接池使用javax.sql.DataSource接口来表示连接池.
注意:DataSource仅仅只是一个接口,由各大服务器厂商来实现(Tomcat.JBoss).
常用的DataSource的实现:
(1).DBCP: Spring推荐的, Apache 组织(基金会)
(2).C3P0: Hibernate推荐的
(3).Druid : (德鲁伊)阿里巴巴开源的,性能最好,速度最快
DataSource(数据源)和连接池(Connection Pool)是同一个.
4.使用连接池和不使用连接池的区别在哪里
从代码上:
不使用连接池: Conenction对象由DriverManager获取.
Connection conn = DriverManager.getConnection(url,username,password);
使用连接池:
如何创建DataSource对象,如何在DataSource中设置url,账号,密码.
Connection conn = DataSource对象.getConnection();
使用连接池的时候:
释放资源: Connection对象.close():是把Connection放回给连接池,而不是和数据库断开.
5.Druid连接池的使用
(1).准备druid 连接池jar包到项目
(2).测试代码
package com.lin.datasource.test;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
import javax.sql.DataSource;
import org.junit.Test;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
public class DataSourceTest {
@Test
public void testDataSource() throws Exception {
// 1.创建连接池对象
DruidDataSource ds = new DruidDataSource();
// 2.设置连接数据库的账号密码
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/mybatis");
ds.setUsername("root");
ds.setPassword("root");
ds.setMaxActive(10);// 最大连接数
// 3.获取连接对象
Connection conn = ds.getConnection();
System.out.println(conn);
ds.close();
}
// 使用工厂对象创建连接池对象,工厂对象的好处,不需要直接设置账号密码等等,只需要将
// 连接数据库的账号密码等等以指定的 key的名称配置到 xxx.properties文件中即可,工厂对象底层自动读取
@Test
public void testDataSourceByFactory() throws Exception {
// 1.获取类加载器用于加载clsspath下面的 配置文件
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
// 2.读取druid.properties配置文件
InputStream inputStream = classLoader.getResourceAsStream("druid.properties");
// 3.创建Properties对象,并读取配置文件对应的输入流
Properties p = new Properties();
p.load(inputStream);
// 4.创建连接池对象
DataSource ds = DruidDataSourceFactory.createDataSource(p);
// 5.获取连接对象
Connection conn = ds.getConnection();
System.out.println(conn);
}
}
druid.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=root
maxActive=10
(3).结果