連線池的作用以及建立
阿新 • • 發佈:2019-02-17
連線池的作用就是用來管理連線,提升連線的利用效率
hibernate中連線池如何配置
2)hibernate使用C3P0連線池,除了hibernate的jar包,當然還要匯入C3P0jar包了(如:c3p0-0.9.1.2.jar),否則報錯.<!-- 1. 資料庫連線配置 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///hib_demo</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">abc</property> <!-- 資料庫方法配置, hibernate在執行的時候,會根據不同的方言生成符合當前資料庫語法的sql --> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- 2. 其他相關配置 --> <!-- 2.1 顯示hibernate在執行時候執行的sql語句 --> <property name="hibernate.show_sql">true</property> <!-- 2.2 格式化sql <property name="hibernate.format_sql">true</property> --> <!-- 2.3 自動建表 --> <property name="hibernate.hbm2ddl.auto">update</property> <!-- *********連線池配置*********** --> <!-- 配置連線池驅動管理類 --> <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> <!-- 配置連線池引數資訊 --> <property name="hibernate.c3p0.max_size">5</property> <!-- 最大連線數 --> <property name="hibernate.c3p0.min_size">2</property> <!-- 最小連線數 --> <property name="hibernate.c3p0.timeout">5000</property> <!-- 超時時間 --> <property name="hibernate.c3p0.max_statements">100</property> <!-- 最大執行的命令格個數 --> <property name="hibernate.c3p0.idle_test_period">30000</property> <!-- 空閒測試時間 --> <property name="hibernate.c3p0.acquire_increment">2</property> <!-- 連線不夠用時,每次增加的個數 --> <!-- #hibernate.c3p0.max_size 2 #hibernate.c3p0.min_size 2 #hibernate.c3p0.timeout 5000 #hibernate.c3p0.max_statements 100 #hibernate.c3p0.idle_test_period 3000 #hibernate.c3p0.acquire_increment 2 #hibernate.c3p0.validate false --> </session-factory>
JDBC配置連線池 示例C3p0
try{ ComboPooledDataSource source = new ComboPooledDataSource(); source.setDriverClass("com.mysql.jdbc.Driver"); source.setJdbcUrl("jdbc:mysql:///day11"); source.setUser("root"); source.setPassword("root"); conn = source.getConnection(); ps = conn.prepareStatement("select * from account"); rs = ps.executeQuery(); while(rs.next()){ String name = rs.getString("name"); System.out.println(name); } }catch (Exception e) { e.printStackTrace(); }finally{ if(rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ rs = null; } } if(ps!=null){ try { ps.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ ps = null; } } if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ conn = null; } } } }
第二種方式 創建出c3p0的配置檔案 然後載入
<?xml version="1.0" encoding="utf-8"?> <c3p0-config> <default-config> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql:///c3p0test</property> <property name="user">root</property> <property name="password">root</property> </default-config> <named-config name="mysql2"> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql:///c3p0test1</property> <property name="user">root</property> <property name="password">root</property> </named-config>
C3p0的使用較為簡單,通常來說只要在src目錄下新增一個c3p0的配置檔案,在程式中使用一句程式碼
1)ComboPooledDataSource source = new ComboPooledDataSource()使用配置檔案中的預設配置,或者
2)ComboPooledDataSource source = new ComboPooledDataSource(“配置檔案中name-config的名稱”)使用配置檔案中的其他配置
第二種連線池的建立DBCP
一、導包
Apache官網下載DBCP包,匯入兩個包路徑如下:
commons-dbcp-1.4-bin\commons-dbcp-1.4\commons-dbcp-1.4.jar:連線池的實現
commons-pool-1.5.6-bin\commons-pool-1.5.6\commons-pool-1.5.6.jar:連線池實現的依賴庫
//獲取BasicDataSource並配置,開始....
BasicDataSource source = new BasicDataSource();
source.setDriverClassName("com.mysql.jdbc.Driver");
source.setUrl("jdbc:mysql:///dbcptest");
source.setUsername("root");
source.setPassword("root");
//獲取BasicDataSource並配置,結束......
try {
conn = source.getConnection();
ps = conn.prepareStatement("select * from account");
rs = ps.executeQuery();
while (rs.next()) {
String name = rs.getString("name");
System.out.println(name);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
rs = null;
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
ps = null;
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
conn = null;
}
}
}
方式二:使用BasicDataSourceFactory +配置檔案
try { //獲取並配置DataSource開始
Properties prop = new Properties();
prop.load(new FileReader("dbcp.properties"));
BasicDataSourceFactory factory = new BasicDataSourceFactory();
DataSource source = factory.createDataSource(prop);
//獲取並配置DataSource,結束
conn = source.getConnection();
ps = conn.prepareStatement("select * from account");
rs = ps.executeQuery();
while (rs.next()) {
String name = rs.getString("name");
System.out.println(name);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
rs = null;
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
ps = null;
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
conn = null;
}
}
}
#連線設定
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc
username=root
password=
#<!-- 初始化建立的連線數,當不夠時再去建立 -->
initialSize=10
#最大連線數量,連線數連不能超過該值
maxActive=50
#<!-- 最大空閒連線,當空閒連線超過該值時就挨個關閉多餘的連線,但不能小於minldle -->
maxIdle=20
#<!-- 最小空閒連線,空閒連線的最下值 -->
minIdle=5
#<!-- 超時等待時間以毫秒為單位 6000毫秒/1000等於60秒,當連線超過該時間便認為其實空閒連線 -->
maxWait=60000
#JDBC驅動建立連線時附帶的連線屬性屬性的格式必須為這樣:[屬性名=property;]
#注意:"user" 與 "password" 兩個屬性會被明確地傳遞,因此這裡不需要包含他們。
connectionProperties=useUnicode=true;characterEncoding=gbk
#指定由連線池所建立的連線的自動提交(auto-commit)狀態。
defaultAutoCommit=true
#driver default 指定由連線池所建立的連線的事務級別(TransactionIsolation)。
#可用值為下列之一:(詳情可見javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_UNCOMMITTED
還有一種就是tomcat內建資料來源(暫未深瞭解)