1. 程式人生 > >JDBC資料庫連線池c3po配置

JDBC資料庫連線池c3po配置

使用前需要先匯入c3po開源jar包,
import java.sql.Connection;
import java.sql.SQLException;


import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.mchange.v2.c3p0.DataSources;




public class ConnectionManager {
        private static ConnectionManager instance;


        private ComboPooledDataSource ds;


        private ConnectionManager() throws Exception {
            
            ds = new ComboPooledDataSource();


            ds.setDriverClass("oracle.jdbc.driver.OracleDriver");
            ds.setJdbcUrl("jdbc:oracle:thin:@192.168.1.210:1521:orcl2");
            ds.setUser("abc");
            ds.setPassword("123456");
            ds.setInitialPoolSize(3);//初始化時獲取三個連線,取值應在minPoolSize與maxPoolSize之間。Default: 3 initialPoolSize
            ds.setMaxPoolSize(10);//連線池中保留的最大連線數。Default: 15 maxPoolSize
            ds.setMinPoolSize(1);// 連線池中保留的最小連線數。
            ds.setAcquireIncrement(1);//當連線池中的連線耗盡的時候c3p0一次同時獲取的連線數。Default: 3 acquireIncrement
            ds.setIdleConnectionTestPeriod(60);//每60秒檢查所有連線池中的空閒連線。Default: 0  idleConnectionTestPeriod
            ds.setMaxIdleTime(25000);  //最大空閒時間,25000秒內未使用則連線被丟棄。若為0則永不丟棄。Default: 0  maxIdleTime
            ds.setAutoCommitOnClose(true); //連線關閉時預設將所有未提交的操作回滾。Default: false autoCommitOnClose
            
            /**
             * 註釋------------------------------------------------------------------------
             */
            //定義所有連線測試都執行的測試語句。在使用連線測試的情況下這個一顯著提高測試速度。注意:
            //測試的表必須在初始資料來源的時候就存在。Default: null  preferredTestQuery
            //ds.setPreferredTestQuery("select sysdate from dual");
            // 因效能消耗大請只在需要的時候使用它。如果設為true那麼在每個connection提交的
            // 時候都將校驗其有效性。建議使用idleConnectionTestPeriod或automaticTestTable
            // 等方法來提升連線測試的效能。Default: false testConnectionOnCheckout
            /**
             * 註釋------------------------------------------------------------------------
             */
            
            ds.setTestConnectionOnCheckout(true);
            //如果設為true那麼在取得連線的同時將校驗連線的有效性。Default: false  testConnectionOnCheckin
            ds.setTestConnectionOnCheckin(true);
            
            ds.setAcquireRetryAttempts(10);//定義在從資料庫獲取新連線失敗後重復嘗試的次數。Default: 30  acquireRetryAttempts
            
            ds.setAcquireRetryDelay(1000);//兩次連線中間隔時間,單位毫秒。Default: 1000 acquireRetryDelay
            //獲取連線失敗將會引起所有等待連線池來獲取連線的執行緒丟擲異常。但是資料來源仍有效
            //保留,並在下次呼叫getConnection()的時候繼續嘗試獲取連線。如果設為true,那麼在嘗試
            //獲取連線失敗後該資料來源將申明已斷開並永久關閉。Default: false  breakAfterAcquireFailure
            ds.setBreakAfterAcquireFailure(true);
           
        }


        public static final ConnectionManager getInstance() {
            if (instance == null) {
                try {
                    instance = new ConnectionManager();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return instance;
        }


        public synchronized final Connection getConnection() {
            try {
                return ds.getConnection();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }


        protected void finalize() throws Throwable {
            DataSources.destroy(ds); //關閉datasource
            super.finalize();
        }


    
}