一、好处
- 更方便地获取连接对象,效率高
- 资源可以更好的重复利用
- 便于进行必要的管理
二、数据库连接池技术
DBCP | 速度快、不稳定 |
---|---|
C3P0 | 稳定,速度慢 |
Druid | 兼具两者的优点 |
三、DataSource
DataSource通常被称为数据源,它包含连接池和连接池管理两个部分
习惯上也把DataSource成为连接池
四、使用方法
代码中设置参数
public class DruidUse1 {
public void test() throws SQLException {
//获取一个数据库连接池
DruidDataSource dataSource = new DruidDataSource();
//设置四个参数
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/shop");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//设置最大连接数
dataSource.setMaxActive(10);
//设置初始连接数
dataSource.setInitialSize(5);
//从连接池中获取一个数据库连接对象
Connection connection = dataSource.getConnection();
}
}
使用配置文件
public class DruidUse2 {
@Test
public void teseDruid() throws Exception {
//提供Properties,并加载指定配置文件的流
Properties properties = new Properties();
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("Druid.properties");
properties.load(is);
//通过DruidDataSourceFactory创建一个数据源
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
//通过数据源获得数据库连接对象
System.out.println(dataSource.getConnection());
}
}
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/shop
username=root
password=123456
maxActive=10
initialSize=5
配置文件中的参数名是规定好的,不能随意写
如:username,password,url,driverClassName,name(不同数据源的区分标志),initialSize,maxActive;
五、创建数据库连接池工具类
public class DruidUtils {
private static DataSource dataSource;
static {
try {
Properties properties = new Properties();
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("Druid.properties");
properties.load(is);
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e){
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
public static void close(Connection connection){
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Q.E.D.