数据库连接池——Druid
一、好处
- 更方便地获取连接对象,效率高
- 资源可以更好的重复利用
- 便于进行必要的管理
二、数据库连接池技术
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(); } } } }