Druid连接池入门使用和工具类封装
Druid(德鲁伊):阿里巴巴提供的数据库连接池技术,是目前最好的数据库连接池。
600+ 项目中使用,支持 sql 日志监控
DataSource 功能 * 获取连接: Connection getConnection() * 归还连接: connction.close()连接池厂商对 connection 对象的 close() 方法进行(增强),执行该方法时不是销毁对象,而是归还到连接池中 使用的动态代理技术进行增强的....
// 1. 创建 druid 数据源(连接池)对象 DruidDataSource dataSource = new DruidDataSource(); // 2. 配置数据库基本四项,创建连接,初始化连接池容器 dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/web"); dataSource.setUsername("root"); dataSource.setPassword("root");// 指定初始化个数
dataSource.setInitialSize(5);
// 指定最大个数
dataSource.setMaxActive(100);
// 指定低峰期个数
dataSource.setMinIdle(20);
// 指定等待时间
dataSource.setMaxWait(3000);// 3. 从连接池中获得连接对象
Connection connection = dataSource.getConnection();
System.out.println(connection);// 4. 归还到连接池
connection.close(); // 此对象是 druid 提供的子类,实现了对 close 方法的增强,不再是销毁对象,而是归还到连接池
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/databasename username=root password=root #初始化个数 initialSize=5 #最大连接数 maxActive=10 #等待时间,毫秒 maxWait=3000 #最少连接数 minIdle=3
// 通过类加载器,加载 druid.properties 文件,获取 io 流 InputStream in = DruidDemo2.class.getClassLoader().getResourceAsStream("druid.properties"); Properties properties = new Properties(); properties.load(in);// 通过 druid 工厂,创建 druid 连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);// 从连接池获取连接
for (int i = 1; i <= 11; i++) {
Connection connection = dataSource.getConnection();
// 进行 jdbc 的 crud 操作
System.out.println(connection);
// 模拟归还
if(i== 10){
connection.close();
}
// 连接池使用详情
System.out.println(dataSource);
}
/* mybatis 内置连接初始化代码.... */ public class JdbcUtils {</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 声明连接池对象</span> <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span><span style="color: rgba(0, 0, 0, 1)"> DataSource dataSource; </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 1. 初始化连接池容器 static{}</span> <span style="color: rgba(0, 0, 255, 1)">static</span><span style="color: rgba(0, 0, 0, 1)"> { </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> { </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 1.加载druid.properties 配置文件</span> InputStream in = JdbcUtils.<span style="color: rgba(0, 0, 255, 1)">class</span>.getClassLoader().getResourceAsStream("druid.properties"<span style="color: rgba(0, 0, 0, 1)">); Properties properties </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Properties(); properties.load(in); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 2.通过druid的工厂,创建连接池对象</span> dataSource =<span style="color: rgba(0, 0, 0, 1)"> DruidDataSourceFactory.createDataSource(properties); } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Exception e) { </span><span style="color: rgba(0, 0, 255, 1)">throw</span> <span style="color: rgba(0, 0, 255, 1)">new</span> RuntimeException("druid连接池初始化失败..."<span style="color: rgba(0, 0, 0, 1)">); } } </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 2. 提供获取连接池对象的静态方法</span> <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span><span style="color: rgba(0, 0, 0, 1)"> DataSource getDataSource() { </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> dataSource; } </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 3. 提供获取连接对象的静态方法</span> <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> Connection getConnection() <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> Exception { </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> dataSource.getConnection(); } </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 4. 提供释放资源的方法(conn对象不是销毁,而是归还到连接池)</span> <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> release(ResultSet resultSet, Statement statement, Connection connection) { </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 关闭ResultSet</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (resultSet != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) { </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> { resultSet.close(); } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (SQLException e) { e.printStackTrace(); } } </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 关闭Statement</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (statement != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) { </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> { statement.close(); } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (SQLException e) { e.printStackTrace(); } } </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 关闭Connection</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (connection != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) { </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> { statement.close(); } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (SQLException e) { e.printStackTrace(); } } } </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 方法重载</span> <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> release(Statement statement, Connection connection) { release(</span><span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">, statement, connection); }
}