本文最后更新于:December 3, 2021 pm
Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为。Druid连接池内置了WallFilter 提供防SQL注入功能,在不影响性能的同时防御SQL注入攻击。
目录
阿里巴巴Druid连接池开源项目地址
1.环境准备
下载 Druid jar包。并导入到项目中。
2.Druid连接池工具类
db.properties
⚠️特别提醒:username、password不能写成简写。必须写成这两个!!!
| driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/WeekDay?serverTimezone=GMT%2B8 username=root password=loong461
initialSize=10
maxActive=30
minIdle=5
maxWait=5000
|
DbUtils.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| package com.tothefor.OtherTest.Duid.Utils;
import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidDataSourceFactory;
import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties;
public class DbUtils { private static DruidDataSource dds; static{ Properties properties = new Properties(); InputStream is = DbUtils.class.getResourceAsStream("/db.properties"); try { properties.load(is); dds = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }
public static Connection getConnection() { try { return dds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return null; } public static void closeAll(Connection connection, Statement statement, ResultSet resultSet){ try { if(resultSet != null){ resultSet.close(); } if(statement != null){ statement.close(); } if(connection != null){ connection.close(); } }catch (SQLException e){ e.printStackTrace(); } } }
|
测试函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| package com.tothefor.OtherTest.Duid.Utils.Test;
import com.tothefor.OtherTest.Duid.Utils.DbUtils;
import java.sql.Connection; import java.sql.SQLException;
public class DbUtilsTest { public static void main(String[] args) throws Exception { for(int i = 1; i <= 15; ++i){ Connection connection = DbUtils.getConnection(); System.out.println(connection); connection.close(); } } }
com.mysql.cj.jdbc.ConnectionImpl@fe18270 com.mysql.cj.jdbc.ConnectionImpl@fe18270 com.mysql.cj.jdbc.ConnectionImpl@fe18270 com.mysql.cj.jdbc.ConnectionImpl@fe18270 com.mysql.cj.jdbc.ConnectionImpl@fe18270 com.mysql.cj.jdbc.ConnectionImpl@fe18270 com.mysql.cj.jdbc.ConnectionImpl@fe18270 com.mysql.cj.jdbc.ConnectionImpl@fe18270 com.mysql.cj.jdbc.ConnectionImpl@fe18270 com.mysql.cj.jdbc.ConnectionImpl@fe18270 com.mysql.cj.jdbc.ConnectionImpl@fe18270 com.mysql.cj.jdbc.ConnectionImpl@fe18270 com.mysql.cj.jdbc.ConnectionImpl@fe18270 com.mysql.cj.jdbc.ConnectionImpl@fe18270 com.mysql.cj.jdbc.ConnectionImpl@fe18270
|
放回连接池处调用的close()并不是关闭,而是放回连接池。因为调用的close()是DruidPooledConnection实现类中的close()。