Druid简介
Druid是阿里巴巴的开源连接池组件,是世界上最好的连接池之一。Druid能对数据库连接进行有效管理和重用,最大化程序执行的效率。连接池负责创建和管理连接,程序只负责取用与归还。
以下是我画的示意图:
下面我来给大家介绍一下Druid的基本配置与使用,需要你有JDBC基础。可以跟着敲一下体验体验。
Druid的基本配置和使用
1.创建一个普通的Java项目,导入Druid的jar包和JDBC的驱动的jar包(注意:一定不要忘了导入这两个jar包,可以手动导入到lib目录下然后导入module或者用maven导入,百度搜索Druid就能找到GitHub的页面,在里面的中文帮助里有提示)
2.然后再项目的src目录下创建一个druid-config.properties的配置文件
3.在属性配置文件中配置如下:
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/files
username=root
password=zc20020106
initialSize=10
maxActive=20
其中driverClassName指JDBC驱动的名字,url是连接字符串,username指数据库的用户名,password指数据库密码,initialSize指程序启动时默认创建的数据库连接数,maxActive表示如果连接数大于intitialSize的数后创建的最大连接数。
4.创建一个DruidSimple类来用于测试今天的案例。
然后再main方法中编写代码如下,注释里有对代码的详细解释:
package com.haiexijun.sample; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; public class DruidSample { public static void main(String[] args) { //1.加载属性文件 Properties properties=new Properties(); //DruidSample.class.getResource("src/druid-config.properties")表示获取 // 当前DruidSample类路径下的属性文件的路径 String propertyFile=DruidSample.class.getResource("/druid-config.properties").getPath(); //下面这是一个容错的考虑,因为配置文件路径可能有中文或者空格。将要它转换为utf-8,然后对decode()进行try catch try { propertyFile =new URLDecoder().decode(propertyFile,"UTF-8"); //读取配置文件 properties.load(new FileInputStream(propertyFile)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //2.获取DataSource数据源对象(其实这里数据源可以理解为数据库),选择java.sql包下的DataSources Connection conn=null; PreparedStatement ps=null; ResultSet rs=null; try { DataSource dataSource= DruidDataSourceFactory.createDataSource(properties); //3.创建数据库连接,获取Connection数据库连接对象对象 //eg:这里创建20个数据库连接为例 for (int i = 0; i < 20; i++) { conn=dataSource.getConnection(); } //下面的操作就和jdbc一样了 String sql="select id from myfile"; ps= conn.prepareStatement(sql); rs= ps.executeQuery(); while (rs.next()){ System.out.println(rs.getInt("id")); } } catch (Exception e) { e.printStackTrace(); }finally { //不要忘记finally来释放资源 //但是这里使用连接池关闭和不使用连接池关闭有所不同, // 使用连接池conn.close()是将连接回收到连接池中, // 不使用连接池conn.close()关闭则直接释放连接 if (conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } if (ps!=null){ try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } if (rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }
这里创建的是20个连接,刚好达到了最大值。如果创建21个连接,那么第21个连接的操作就要等前20个连接有一个被回收后,才会被执行操作。连接池里的连接在默认的情况下是处于sleep状态。直到程序获取连接后并对他调用。连接完成调用后执行close方法,则该连接又会回到连接池中,等待被调用。
。。。。我的项目目录结构。。。。。
这里这是一个简单的Druid连接池案例,算是入门连接池了。但Druid的功能肯定不止如此啦,还要继续学习啊。谢谢大家的关注。有什么问题评论区见。