天天看點

c3p0和 dbcp的 兩種使用方式(MySql 8.0+ 版)

文章目錄

    • 前置知識:
    • dbcp:
      • 方式一:通過硬代碼進行實作:
      • 方式二: 通過 Properties 檔案進行配置:
    • c3p0:
      • 方式一: 通過硬代碼的方式:
      • 方式二: 通過 cp30-config.xml 配置檔案進行建立連接配接池:
    • 後記:

前置知識:

1、Mysql jdbc URL連接配接參數useSSL、serverTimezone 相關問題。

2、不容錯過的 Java 連接配接池 詳解。

dbcp:

方式一:通過硬代碼進行實作:

package rj.util;

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.Properties;

public class DBCPDemo {


    public static DataSource getDataSourceWithDBCP() {
        BasicDataSource dbcp = new BasicDataSource();
        // 手動設定參數
        dbcp.setDriverClassName("com.mysql.cj.jdbc.Driver");
        // 注意,8.0+ 版的 MySql 連接配接時需要加上時區和字元編碼
        dbcp.setUrl("jdbc:mysql://localhost:3306/sqltest?serverTimezone=GMT%2B8");
        dbcp.setUsername("root");
        dbcp.setPassword("root");
        dbcp.setInitialSize(20);
        dbcp.setMaxActive(10);

        return dbcp;
    }


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

        System.out.println(getDataSourceWithDBCP().getConnection());

    }
}

           

結果:

c3p0和 dbcp的 兩種使用方式(MySql 8.0+ 版)

方式二: 通過 Properties 檔案進行配置:

dbcpconfig.properties檔案:

driverClassName=com.mysql.cj.jdbc.Driver
	url=jdbc:mysql://localhost:3306/sqltest?serverTimezone=GMT%2B8
	username=root
	password=root
	initialSize=20
           

測試:

package rj.util;

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.Properties;

public class DBCPDemo {


    // 方式一
    public static DataSource getDataSourceWithDBCP() {
        BasicDataSource dbcp = new BasicDataSource();
        // 手動設定參數
        dbcp.setDriverClassName("com.mysql.cj.jdbc.Driver");
        // 注意,8.0+ 版的 MySql 連接配接時需要加上時區和字元編碼
        dbcp.setUrl("jdbc:mysql://localhost:3306/sqltest?serverTimezone=GMT%2B8");
        dbcp.setUsername("root");
        dbcp.setPassword("root");
        dbcp.setInitialSize(20);
        dbcp.setMaxActive(10);

        return dbcp;
    }

    // 方式二
    public static DataSource getDataSourceWithDBCPByProperties() throws Exception {
        DataSource dbcp = null;

        // 加載配置檔案時需要先有一個 Properties 對象
        Properties properties = new Properties();

        // load時需要一個流的對象,是以需要轉換成流
        InputStream input = new DBCPDemo().getClass().getClassLoader().getResourceAsStream("dbcpconfig.properties");

        /**
         * Reads a property list (key and element pairs) from the input
         * byte stream. The input stream is in a simple line-oriented
         * format as specified in
         * {@link #load(java.io.Reader) load(Reader)} and is assumed to use
         * the ISO 8859-1 character encoding; that is each byte is one Latin1
         * character. Characters not in Latin1, and certain special characters,
         * are represented in keys and elements using Unicode escapes as defined in
         * section 3.3 of
         * <cite>The Java&trade; Language Specification</cite>.
         * <p>
         * The specified stream remains open after this method returns.
         *
         * @param      inStream   the input stream.
         * @exception  IOException  if an error occurred when reading from the
         *             input stream.
         * @throws     IllegalArgumentException if the input stream contains a
         *             malformed Unicode escape sequence.
         * @since 1.2
         */
        properties.load(input);

        // 通過配置檔案建立資料源,
        dbcp = BasicDataSourceFactory.createDataSource(properties);
        return dbcp;
    }

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

//        System.out.println(getDataSourceWithDBCP().getConnection());

        // 跟連接配接池建立連接配接
        System.out.println(getDataSourceWithDBCPByProperties().getConnection());
    }
}

           

效果:

c3p0和 dbcp的 兩種使用方式(MySql 8.0+ 版)

c3p0:

方式一: 通過硬代碼的方式:

package rj.util;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.beans.PropertyVetoException;
import java.sql.SQLException;

public class C3P0Demo {

    // 手動添加參數建立連接配接池
    public static DataSource getDataSourceWithC3P0() throws PropertyVetoException {
        ComboPooledDataSource c3p0 = new ComboPooledDataSource();
        c3p0.setDriverClass("com.mysql.cj.jdbc.Driver");
        c3p0.setJdbcUrl("jdbc:mysql://localhost:3306/sqltest?serverTimezone=GMT%2B8");
        c3p0.setUser("root");
        c3p0.setPassword("root");

        return c3p0;
    }


    public static void main(String[] args) throws PropertyVetoException, SQLException {
        System.out.println(getDataSourceWithC3P0().getConnection());
//        System.out.println(getDateSourceWithC3P0ByConfig().getConnection());
    }
}

           

效果:

c3p0和 dbcp的 兩種使用方式(MySql 8.0+ 版)

方式二: 通過 cp30-config.xml 配置檔案進行建立連接配接池:

cp30-config.xml

<?xml version="1.0" encoding="UTF-8"?>

<c3p0-config>
    
    <!-- 預設的   -->
    <default-config>
        <property name="user">root</property>
        <property name="password">root</property>
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/sqltest?&amp;useSSL=false&amp;serverTimezone=UTC</property>

    </default-config>

    <!-- 使用者指定的    -->
    <named-config name = "rj">
        <property name="user">root</property>
        <property name="password">root</property>
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/sqltest?&amp;useSSL=false&amp;serverTimezone=UTC</property>

    </named-config>


</c3p0-config>
           

測試:

package rj.util;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.beans.PropertyVetoException;
import java.sql.SQLException;

public class C3P0Demo {

    // 手動添加參數建立連接配接池
    public static DataSource getDataSourceWithC3P0() throws PropertyVetoException {
        ComboPooledDataSource c3p0 = new ComboPooledDataSource();
        c3p0.setDriverClass("com.mysql.cj.jdbc.Driver");
        c3p0.setJdbcUrl("jdbc:mysql://localhost:3306/sqltest?serverTimezone=GMT%2B8");
        c3p0.setUser("root");
        c3p0.setPassword("root");

        return c3p0;
    }


    // 通過配置檔案的方式建立一個連接配接池
    public static DataSource getDateSourceWithC3P0ByConfig() {

        // 會根據指定的配置名進行建立連接配接池,如果沒有指定配置名,則采用預設的
        ComboPooledDataSource c3p0 = new ComboPooledDataSource("rj");
        return c3p0;
    }

    public static void main(String[] args) throws PropertyVetoException, SQLException {
        System.out.println("方式一:"+getDataSourceWithC3P0().getConnection());
        System.out.println("方式二"+getDateSourceWithC3P0ByConfig().getConnection());
    }
}

           

效果:

c3p0和 dbcp的 兩種使用方式(MySql 8.0+ 版)

後記:

有問題的小夥伴歡迎留言,共同進步。

嘻嘻,如果對您有幫助,是我的榮幸,記得點個贊哦!