• jdbc 数据源(DruidDataSourceFactory)连接池 —— druid


    1. <dependencies>
    2. <dependency>
    3. <groupId>mysqlgroupId>
    4. <artifactId>mysql-connector-javaartifactId>
    5. <version>8.0.28version>
    6. <scope>compilescope>
    7. dependency>
    8. <dependency>
    9. <groupId>com.alibabagroupId>
    10. <artifactId>druidartifactId>
    11. <version>1.2.16version>
    12. dependency>
    13. dependencies>

    1、德鲁伊数据源连接池技术

    1. package com.csdn.jdbc;
    2. import com.alibaba.druid.pool.DruidDataSource;
    3. import com.alibaba.druid.pool.DruidPooledConnection;
    4. import java.sql.SQLException;
    5. //演示数据源连接池 druid 德鲁伊数据源连接池技术
    6. public class DataSourceConnectPool {
    7. public static void main(String[] args) throws SQLException {
    8. DruidDataSource dataSource = new DruidDataSource();
    9. dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
    10. dataSource.setUrl("jdbc:mysql:///fruitdb");
    11. dataSource.setUsername("root");
    12. dataSource.setPassword("123456");
    13. dataSource.setInitialSize(5); //初始化数量
    14. dataSource.setMaxActive(10); //最大激活数
    15. dataSource.setMaxWait(5000); //最大等待时间
    16. for (int count = 1; count <= 11; count++) {
    17. DruidPooledConnection conn = dataSource.getConnection();
    18. System.out.println(conn);
    19. }
    20. }
    21. }
    22. D:\Java\jdk-17\bin\java.exe com.csdn.jdbc.DataSourceConnectPool
    23. 1027, 2023 12:51:59 下午 com.alibaba.druid.pool.DruidDataSource info
    24. 信息: {dataSource-1} inited
    25. com.mysql.cj.jdbc.ConnectionImpl@408d971b
    26. com.mysql.cj.jdbc.ConnectionImpl@6c6cb480
    27. com.mysql.cj.jdbc.ConnectionImpl@3c46e67a
    28. com.mysql.cj.jdbc.ConnectionImpl@c730b35
    29. com.mysql.cj.jdbc.ConnectionImpl@206a70ef
    30. com.mysql.cj.jdbc.ConnectionImpl@292b08d6
    31. com.mysql.cj.jdbc.ConnectionImpl@22555ebf
    32. com.mysql.cj.jdbc.ConnectionImpl@36ebc363
    33. com.mysql.cj.jdbc.ConnectionImpl@45752059
    34. com.mysql.cj.jdbc.ConnectionImpl@34e9fd99
    35. Exception in thread "main" com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 5003, active 10, maxActive 10, creating 0
    36. at com.alibaba.druid.pool.DruidDataSource.getConnectionInternal(DruidDataSource.java:1840)
    37. at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1470)
    38. at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1450)
    39. at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440)
    40. at com.csdn.jdbc.DataSourceConnectPool.main(DataSourceConnectPool.java:22)
    41. Process finished with exit code 1
    • 获取的10个连接对象都是不同的,最大激活数是10个,如果想获得第11个,等待5秒,就会获取连接对象超时。
    1. package com.csdn.jdbc;
    2. import com.alibaba.druid.pool.DruidDataSource;
    3. import com.alibaba.druid.pool.DruidPooledConnection;
    4. import java.sql.SQLException;
    5. //演示数据源连接池 druid 德鲁伊数据源连接池技术
    6. public class DataSourceConnectPool {
    7. public static void main(String[] args) throws SQLException {
    8. DruidDataSource dataSource = new DruidDataSource();
    9. dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
    10. dataSource.setUrl("jdbc:mysql:///fruitdb");
    11. dataSource.setUsername("root");
    12. dataSource.setPassword("123456");
    13. dataSource.setInitialSize(5); //初始化数量
    14. dataSource.setMaxActive(10); //最大激活数
    15. dataSource.setMaxWait(5000); //最大等待时间
    16. for (int count = 1; count <= 11; count++) {
    17. DruidPooledConnection conn = dataSource.getConnection();
    18. System.out.println(conn);
    19. if (count % 4 == 0) {
    20. conn.close();
    21. }
    22. }
    23. }
    24. }
    25. D:\Java\jdk-17\bin\java.exe
    26. 1027, 2023 12:57:41 下午 com.alibaba.druid.pool.DruidDataSource info
    27. 信息: {dataSource-1} inited
    28. com.mysql.cj.jdbc.ConnectionImpl@6c6cb480
    29. com.mysql.cj.jdbc.ConnectionImpl@3c46e67a
    30. com.mysql.cj.jdbc.ConnectionImpl@c730b35
    31. com.mysql.cj.jdbc.ConnectionImpl@206a70ef
    32. com.mysql.cj.jdbc.ConnectionImpl@206a70ef
    33. com.mysql.cj.jdbc.ConnectionImpl@292b08d6
    34. com.mysql.cj.jdbc.ConnectionImpl@22555ebf
    35. com.mysql.cj.jdbc.ConnectionImpl@36ebc363
    36. com.mysql.cj.jdbc.ConnectionImpl@36ebc363
    37. com.mysql.cj.jdbc.ConnectionImpl@45752059
    38. com.mysql.cj.jdbc.ConnectionImpl@34e9fd99

    2、数据源连接池,加载 jdbc.properties 

    1. jdbc.driver=com.mysql.cj.jdbc.Driver
    2. jdbc.url=jdbc:mysql:///fruitdb
    3. jdbc.user=root
    4. jdbc.pwd=123456
    5. jdbc.initial_size=5
    6. jdbc.max_active=10
    7. jdbc.max_wait=5000
    1. package com.csdn.jdbc;
    2. import com.alibaba.druid.pool.DruidDataSource;
    3. import com.alibaba.druid.pool.DruidPooledConnection;
    4. import java.io.IOException;
    5. import java.io.InputStream;
    6. import java.sql.SQLException;
    7. import java.util.Properties;
    8. //演示数据源连接池 加载 jdbc.properties
    9. public class DataSourceConnectPoolProperties {
    10. public static void main(String[] args) throws SQLException, IOException {
    11. InputStream inputStream = DataSourceConnectPoolProperties.class.getClassLoader().getResourceAsStream("jdbc.properties");
    12. Properties properties = new Properties();
    13. properties.load(inputStream);
    14. DruidDataSource dataSource = new DruidDataSource();
    15. dataSource.setDriverClassName(properties.getProperty("jdbc.driver"));
    16. dataSource.setUrl(properties.getProperty("jdbc.url"));
    17. dataSource.setUsername(properties.getProperty("jdbc.user"));
    18. dataSource.setPassword(properties.getProperty("jdbc.pwd"));
    19. dataSource.setInitialSize(Integer.parseInt(properties.getProperty("jdbc.initial_size"))); //初始化数量
    20. dataSource.setMaxActive(Integer.parseInt(properties.getProperty("jdbc.max_active"))); //最大激活数
    21. dataSource.setMaxWait(Integer.parseInt(properties.getProperty("jdbc.max_wait"))); //最大等待时间
    22. for (int count = 1; count <= 11; count++) {
    23. DruidPooledConnection conn = dataSource.getConnection();
    24. System.out.println(conn);
    25. if (count % 4 == 0) {
    26. conn.close();
    27. }
    28. }
    29. }
    30. }

    3、数据源连接池,加载升级版 jdbc.properties,key是固定好的,是和连接池工厂中的属性一致的

    1. driverClassName=com.mysql.cj.jdbc.Driver
    2. url=jdbc:mysql:///fruitdb
    3. username=root
    4. password=123456
    5. initialSize=5
    6. maxActive=10
    7. maxWait=1000
    1. package com.csdn.jdbc;
    2. import com.alibaba.druid.pool.DruidDataSourceFactory;
    3. import javax.sql.DataSource;
    4. import java.io.InputStream;
    5. import java.sql.Connection;
    6. import java.util.Properties;
    7. //演示数据源连接池 加载 jdbc.properties , key是固定好的,是和连接池工厂中的属性一致的
    8. public class DataSourceConnectPoolPropertiesFactory {
    9. public static void main(String[] args) throws Exception {
    10. InputStream inputStream = DataSourceConnectPoolPropertiesFactory.class.getClassLoader().getResourceAsStream("jdbc2.properties");
    11. Properties properties = new Properties();
    12. properties.load(inputStream);
    13. DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
    14. for (int count = 1; count <= 11; count++) {
    15. Connection conn = dataSource.getConnection();
    16. System.out.println(conn);
    17. if (count % 4 == 0) {
    18. conn.close();
    19. }
    20. }
    21. }
    22. }

  • 相关阅读:
    全栈监控,可视化整个堆栈
    Linux 利用inotify和rsync服务实现数据实时同步
    功能具象化复盘
    【大数据离线项目三:将HIve数仓中的dim进行拉宽聚合处理,PostgreSQL的使用,以及怎么将数据导出到PostgreSQL数据库中】
    LeetCode 0630.课程表 III:贪心 + 优先队列
    JAVA主要API
    LTE无线网络优化基础
    Linux下的SQLite数据库的基本使用
    CSS文本样式详解
    SparkMlib 之逻辑回归及其案例
  • 原文地址:https://blog.csdn.net/m0_65152767/article/details/134073866