jdbc data source (DruidDataSourceFactory) connection pool – druid

 <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.16</version>
        </dependency>
    </dependencies>

1. Druid data source connection pool technology

package com.csdn.jdbc;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidPooledConnection;
import java.sql.SQLException;
// Demonstrate data source connection pool druid Druid data source connection pool technology
public class DataSourceConnectPool {

    public static void main(String[] args) throws SQLException {

        DruidDataSource dataSource = new DruidDataSource();

        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql:///fruitdb");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");

        dataSource.setInitialSize(5); //Initialization quantity
        dataSource.setMaxActive(10); //Maximum number of activations
        dataSource.setMaxWait(5000); //Maximum waiting time

        for (int count = 1; count <= 11; count + + ) {
            DruidPooledConnection conn = dataSource.getConnection();
            System.out.println(conn);
        }
    }
}
D:\Java\jdk-17\bin\java.exe com.csdn.jdbc.DataSourceConnectPool
October 27, 2023 12:51:59 PM com.alibaba.druid.pool.DruidDataSource info
Information: {dataSource-1} inited
com.mysql.cj.jdbc.ConnectionImpl@408d971b
com.mysql.cj.jdbc.ConnectionImpl@6c6cb480
com.mysql.cj.jdbc.ConnectionImpl@3c46e67a
com.mysql.cj.jdbc.ConnectionImpl@c730b35
com.mysql.cj.jdbc.ConnectionImpl@206a70ef
com.mysql.cj.jdbc.ConnectionImpl@292b08d6
com.mysql.cj.jdbc.ConnectionImpl@22555ebf
com.mysql.cj.jdbc.ConnectionImpl@36ebc363
com.mysql.cj.jdbc.ConnectionImpl@45752059
com.mysql.cj.jdbc.ConnectionImpl@34e9fd99
Exception in thread "main" com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 5003, active 10, maxActive 10, creating 0
at com.alibaba.druid.pool.DruidDataSource.getConnectionInternal(DruidDataSource.java:1840)
at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1470)
at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1450)
at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1440)
at com.csdn.jdbc.DataSourceConnectPool.main(DataSourceConnectPool.java:22)

Process finished with exit code 1
  • The 10 connection objects obtained are all different, and the maximum number of activations is 10. If you want to obtain the 11th one, wait for 5 seconds, and the connection object will time out.
package com.csdn.jdbc;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidPooledConnection;
import java.sql.SQLException;
// Demonstrate data source connection pool druid Druid data source connection pool technology
public class DataSourceConnectPool {

    public static void main(String[] args) throws SQLException {

        DruidDataSource dataSource = new DruidDataSource();

        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql:///fruitdb");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");

        dataSource.setInitialSize(5); //Initialization quantity
        dataSource.setMaxActive(10); //Maximum number of activations
        dataSource.setMaxWait(5000); //Maximum waiting time

        for (int count = 1; count <= 11; count + + ) {
            DruidPooledConnection conn = dataSource.getConnection();
            System.out.println(conn);
            
            if (count % 4 == 0) {
                conn.close();
            }
            
        }
    }
}
D:\Java\jdk-17\bin\java.exe
October 27, 2023 12:57:41 PM com.alibaba.druid.pool.DruidDataSource info
Information: {dataSource-1} inited
com.mysql.cj.jdbc.ConnectionImpl@6c6cb480
com.mysql.cj.jdbc.ConnectionImpl@3c46e67a
com.mysql.cj.jdbc.ConnectionImpl@c730b35
com.mysql.cj.jdbc.ConnectionImpl@206a70ef
com.mysql.cj.jdbc.ConnectionImpl@206a70ef
com.mysql.cj.jdbc.ConnectionImpl@292b08d6
com.mysql.cj.jdbc.ConnectionImpl@22555ebf
com.mysql.cj.jdbc.ConnectionImpl@36ebc363
com.mysql.cj.jdbc.ConnectionImpl@36ebc363
com.mysql.cj.jdbc.ConnectionImpl@45752059
com.mysql.cj.jdbc.ConnectionImpl@34e9fd99

2. Data source connection pool, load jdbc.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql:///fruitdb
jdbc.user=root
jdbc.pwd=123456
jdbc.initial_size=5
jdbc.max_active=10
jdbc.max_wait=5000
package com.csdn.jdbc;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidPooledConnection;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.Properties;
//Demo data source connection pool loading jdbc.properties
public class DataSourceConnectPoolProperties {

    public static void main(String[] args) throws SQLException, IOException {

        InputStream inputStream = DataSourceConnectPoolProperties.class.getClassLoader().getResourceAsStream("jdbc.properties");
        Properties properties = new Properties();
        properties.load(inputStream);

        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(properties.getProperty("jdbc.driver"));
        dataSource.setUrl(properties.getProperty("jdbc.url"));
        dataSource.setUsername(properties.getProperty("jdbc.user"));
        dataSource.setPassword(properties.getProperty("jdbc.pwd"));

        dataSource.setInitialSize(Integer.parseInt(properties.getProperty("jdbc.initial_size"))); //Initialization quantity
        dataSource.setMaxActive(Integer.parseInt(properties.getProperty("jdbc.max_active"))); //Maximum number of activations
        dataSource.setMaxWait(Integer.parseInt(properties.getProperty("jdbc.max_wait"))); //Maximum waiting time

        for (int count = 1; count <= 11; count + + ) {
            DruidPooledConnection conn = dataSource.getConnection();
            System.out.println(conn);
            if (count % 4 == 0) {
                conn.close();
            }
        }
    }
}

3. Data source connection pool, load the upgraded version of jdbc.properties, the key is fixed and consistent with the properties in the connection pool factory

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql:///fruitdb
username=root
password=123456
initialSize=5
maxActive=10
maxWait=1000
package com.csdn.jdbc;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
//Demonstrate data source connection pool. Load jdbc.properties. The key is fixed and consistent with the properties in the connection pool factory.
public class DataSourceConnectPoolPropertiesFactory {

    public static void main(String[] args) throws Exception {

        InputStream inputStream = DataSourceConnectPoolPropertiesFactory.class.getClassLoader().getResourceAsStream("jdbc2.properties");
        Properties properties = new Properties();
        properties.load(inputStream);

        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);

        for (int count = 1; count <= 11; count + + ) {
            Connection conn = dataSource.getConnection();
            System.out.println(conn);
            if (count % 4 == 0) {
                conn.close();
            }
        }
    }
}

The knowledge points of the article match the official knowledge files, and you can further learn relevant knowledge. Java skill treeUsing JDBC to operate databasesJDBC Overview 138432 people are learning the system