您好,登錄后才能下訂單哦!
連接池是管理數據庫連接的一種機制,能夠控制連接的個數,默認情況下可以預先創建可用的連接。
有四種常見的連接池框架
1、Apache的DBCP連接池(Tomcat內置了DBCP)
2、C3P0連接池
3、proxcool連接池
4、阿里公司的德魯伊框架。
一、引入Maven(只記錄了DBCP和C3P0的使用)
? ? <dependency>
? ? <groupId>mysql</groupId>
? ? <artifactId>mysql-connector-java</artifactId>
? ? <version>8.0.16</version>
</dependency>
?
? ? <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
? ? <groupId>com.mchange</groupId>
? ? <artifactId>c3p0</artifactId>
? ? <version>0.9.5.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
<dependency>
? ? <groupId>org.apache.commons</groupId>
? ? <artifactId>commons-dbcp2</artifactId>
? ? <version>2.6.0</version>
</dependency>
二、創建連接池,DataSource有提供getConnection接口。這里采用工廠模式獲取數據庫連接池的連接。
package com.neusoft.busmis.fatory;
?
import java.sql.Connection;
?
import javax.sql.DataSource;
?
import org.apache.tomcat.dbcp.dbcp2.BasicDataSource;
//DBCP連接池
public class ConnectionFactoryWithDBCP {
private static DataSource ds = null;
static {
BasicDataSource bds = new BasicDataSource();
bds.setDriverClassName("com.mysql.jdbc.Driver");
bds.setUrl("jdbc:mysql://localhost:3306/busmis?serverTimezone=GMT%2B8");
bds.setUsername("root");
bds.setPassword("123456");
bds.setInitialSize(1); //設置初始的連接個數
bds.setMaxTotal(2); //設置最大連接數
bds.setMaxIdle(2);
bds.setMaxWaitMillis(2000); //設置等待時間
ds = bds;
}
public static Connection getConnection() throws Exception{
return ds.getConnection();
}
}
package com.neusoft.busmis.fatory;
?
import java.sql.Connection;
?
import javax.sql.DataSource;
?
import com.mchange.v2.c3p0.ComboPooledDataSource;
?
public class ConnectionFactoryWithC3P0 {
private static DataSource ds = null;
static {
ComboPooledDataSource cpds = new ComboPooledDataSource();
try {
cpds.setDriverClass("com.mysql.jdbc.Driver");
cpds.setJdbcUrl("jdbc:mysql://localhost:3306/busmis?serverTimezone=GMT%2B8");
cpds.setUser("root");
cpds.setPassword("123456");
cpds.setMinPoolSize(1); //設置最小的連接個數
cpds.setAcquireIncrement(1);//每次新增的連接個數
cpds.setMaxPoolSize(10);//設置最大的連接個數
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ds = cpds;
}
public static Connection getConnection() throws Exception{
return ds.getConnection();
}
public static DataSource getDataSource() throws Exception{
return ds;
}
}
三、將連接池放到JNDI
因為在java的機制,如果太久沒使用一個引用,就會自動清除,不能避免地有時候會重復地進行銷毀、創建的動作。所以將連接池配置放在JNDI上,讓它在服務器啟動時就一直存在。
在tomcat的context.xml里配置數據庫信息。
<Resource? name="mysql3306busmis-dbcp"? ?
auth="Container"??
type="javax.sql.DataSource"
factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
maxActive="5"
maxIdle="3"
maxWait="100"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/busmis?serverTimezone=GMT%2B8" />??
?http://www.renrendoc.com/p-21933469.html
?鄭州不孕不育醫院:http://www.zzchyy110.com/
<Resource name="mysql3306busmis-c3p0" auth="Container"
type="com.mchange.v2.c3p0.ComboPooledDataSource"
factory="org.apache.naming.factory.BeanFactory"
driverClass="com.mysql.jdbc.Driver"
jdbcUrl="jdbc:mysql://localhost:3306/busmis?serverTimezone=GMT%2B8"
user="root"
password="root"
minPoolSize="1"
maxPoolSize="4"
maxIdleTime="1800"
acquireIncrement="1"
maxStatements="0"
initialPoolSize="1"
idleConnectionTestPeriod="60"
acquireRetryAttempts="30"
acquireRetryDelay="1000"
testConnectionOnCheckin="false"
breakAfterAcquireFailure="false"
testConnectionOnCheckout="false"/>
DBCP最主要的是drivereClassName(數據庫驅動)、url(數據庫地址)、username(數據庫用戶名)、password(數據庫驅動)、name(Resource的名字)、maxIdle(最大空閑數)、maxActive(最大活動數)、auth(連接池的管理者,Container表示交給Tomcat管理)、maxWait(最大等待時間ms)、type(DataSource類)。
注:如果使用JNDI方式,必須將項目發布到Web才能生效。
工廠模式創建連接,用Context類的lookup來找配置信息,java:/comp/env/name。
package com.neusoft.busmis.fatory;
?
import java.sql.Connection;
?
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
?
public class ConnectionFactoryWithJNDI {
private static DataSource ds = null;
static {
try {
Context ct = new InitialContext();
ds = (DataSource)ct.lookup("java:/comp/env/mysql3306busmis-c3p0");
ct.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws Exception{
return ds.getConnection();
}
}
?
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。