文章目錄
-
- 前置知識:
- 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());
}
}
結果:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNyROBlL1ATN3MTMzkDMyAjNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
方式二: 通過 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™ 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:
方式一: 通過硬代碼的方式:
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());
}
}
效果:
方式二: 通過 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?&useSSL=false&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?&useSSL=false&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());
}
}
效果:
後記:
有問題的小夥伴歡迎留言,共同進步。
嘻嘻,如果對您有幫助,是我的榮幸,記得點個贊哦!