資料庫連線池的學習(二)——DBCP連線池
阿新 • • 發佈:2018-12-12
DBCP(DataBase connection pool),資料庫連線池。是 apache 上的一個 java 連線池專案,也是 tomcat 使用的連線池元件。單獨使用dbcp需要2個包:commons-dbcp.jar,commons-pool.jar。
由於建立資料庫連線是一個非常耗時耗資源的行為,所以通過連線池預先同資料庫建立一些連線,放在記憶體中,應用程式需要建立資料庫連線時直接到連線池中申請一個就行,用完後再放回去。
commons-dbcp.jar:連線池的實現
commons-pool.jar:連線池實現的依賴庫
首先測試硬編碼的方式進行測試:
import org.apache.commons.dbcp.BasicDataSource; import org.junit.Test; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class DBCP1 { //硬編碼方式,就是在程式碼中新增配置 @Test public void t() throws SQLException { BasicDataSource bds = new BasicDataSource(); bds.setDriverClassName("com.mysql.jdbc.Driver"); bds.setUrl("jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8"); bds.setUsername("root"); bds.setPassword("1234"); Connection conn = bds.getConnection(); PreparedStatement ps = conn.prepareStatement("select * from students"); ResultSet rs = ps.executeQuery(); while(rs.next()){ String sname = rs.getString("sname"); System.out.println(sname); } conn.close(); } }
接著使用軟編碼的方式:
先寫一個配置檔案:info.properties
#\u8FDE\u63A5\u8BBE\u7F6E driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8 username=root password=1234 #<!-- 初始化連線 --> initialSize=10 #最大連線數量 maxActive=50 #<!-- 最大空閒連線 --> maxIdle=20 #<!-- 最小空閒連線 --> minIdle=5 #<!-- 超時等待時間以毫秒為單位 6000毫秒/1000等於60秒 --> maxWait=60000
程式碼展示:
import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.junit.Test;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;
public class DBCP2 {
@Test
public void t() throws Exception {
BasicDataSourceFactory bdsf = new BasicDataSourceFactory();
Properties p = new Properties();
InputStream is = BasicDataSourceFactory.class.getResourceAsStream("/info.properties");
p.load(is);
DataSource ds = bdsf.createDataSource(p);
Connection conn = ds.getConnection();
PreparedStatement ps = conn.prepareStatement("select * from students");
ResultSet rs = ps.executeQuery();
while(rs.next()){
String sname = rs.getString("sname");
System.out.println(sname);
}
conn.close(); //回收物件
}
}