- 本文轉自:http://www.iteye.com/topic/151132
-
- 需要下commons-dbcp commons-pool 這兩個jar包
-
- import org.apache.commons.dbcp.BasicDataSource;
- import org.apache.commons.dbcp.BasicDataSourceFactory;
- import java.sql.SQLException;
- import java.sql.Connection;
- import java.util.Properties;
- public class ConnectionSource {
- private static BasicDataSource dataSource = null;
- public ConnectionSource() {
- }
- public static void init() {
- if (dataSource != null) {
- try {
- dataSource.close();
- } catch (Exception e) {
- //
- }
- dataSource = null;
- }
- try {
- Properties p = new Properties();
- p.setProperty("driverClassName", "oracle.jdbc.driver.OracleDriver");
- p.setProperty("url", "jdbc:oracle:thin:@192.168.0.1:1521:testDB");
- p.setProperty("password", "scott");
- p.setProperty("username", "tiger");
- p.setProperty("maxActive", "30");
- p.setProperty("maxIdle", "10");
- p.setProperty("maxWait", "1000");
- p.setProperty("removeAbandoned", "false");
- p.setProperty("removeAbandonedTimeout", "120");
- p.setProperty("testOnBorrow", "true");
- p.setProperty("logAbandoned", "true");
- dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(p);
- } catch (Exception e) {
- //
- }
- }
- public static synchronized Connection getConnection() throws SQLException {
- if (dataSource == null) {
- init();
- }
- Connection conn = null;
- if (dataSource != null) {
- conn = dataSource.getConnection();
- }
- return conn;
- }
- }
在使用Properties來創建BasicDataSource時,有很多參數可以設置,比較重要的還有:
testOnBorrow、testOnReturn、testWhileIdle,他們的意思是當是取得連接、返回連接或連接空閒時是否進行有效性驗證(即是否還和數據庫連通的),默認都爲false。所以當數據庫連接因爲某種原因斷掉後,再從連接池中取得的連接,實際上可能是無效的連接了,所以,爲了確保取得的連接是有效的, 可以把把這些屬性設爲true。當進行校驗時,需要另一個參數:validationQuery,對oracle來說,可以是:SELECT COUNT(*) FROM DUAL,實際上就是個簡單的SQL語句,驗證時,就是把這個SQL語句在數據庫上跑一下而已,如果連接正常的,當然就有結果返回了。
還有2個參數:timeBetweenEvictionRunsMillis 和 minEvictableIdleTimeMillis, 他們兩個配合,可以持續更新連接池中的連接對象,當timeBetweenEvictionRunsMillis 大於0時,每過timeBetweenEvictionRunsMillis 時間,就會啓動一個線程,校驗連接池中閒置時間超過minEvictableIdleTimeMillis的連接對象。