JDBC接続プールの設定

代码:輸入java.io.FileInputStream。輸入java.io.FileNotFoundException。

インポートにjava.io.IOException;
輸入java.io.InputStreamを。
輸入てjava.io.PrintWriter;
輸入java.lang.reflect.InvocationHandler。
輸入java.lang.reflect.Methodオブジェクト。
輸入java.lang.reflect.Proxyの;
インポートのjava.sql.Connection;
インポートのjava.sql.DriverManager。
輸入ます。java.sql.SQLException;
輸入java.sql.SQLFeatureNotSupportedException。
輸入java.util.LinkedList;
輸入java.util.Properties; 

輸入org.slf4j.Logger。

パブリック クラスConnPool {
     //データベース接続の格納された設定を使用してLinkedListの
    プライベート 静的のLinkedList <接続> = ConnPool 新しい新しい LinkedListの<接続> (); 

    //は、コンフィギュレーション・ファイルの静的コードブロックロード
    静的を{ 
     //ここで報告したjarパッケージの実行があります場合は、この異常ファイル、次のように解決策があります。 パス文字列
。= ConnPoolのクラス。.GetClassLoader()のgetResource( "db.properties" ).getPath(); //ソリューションは、このコード行はコメントする必要があります
     = PropertiesUtil.class.getClassLoader.getResourceAsStream(「db.propertiesで// InputStreamを「); //は、上記の問題解決するためにこのコード行を開く
にFileInputStreamのを; //調整プログラムは、より多くの解決よりも開くのコード行をコメントアウトする必要が
試し{ = 新しい新しいFileInputStreamを(パス);上記の解決策は、このコード行をコメント必要が開く// プロパティの小道具 =新しい新しいプロパティ(); prop.load(中); String型のドライバー = prop.getProperty( "ドライバー"); 文字列のURL = prop.getProperty( "URL"); ユーザーのString = prop.getProperty( "ユーザー"); 文字列のパスワード = prop.getProperty( "パスワード"); //は、接続のデータベース接続プールのサイズの数初期化 int型 INITSIZE = Integer.parseInt(prop.getProperty( "INITSIZEを") ); // ロードドライバ にClass.forName(ドライバ) 以下のための int型0 =私は、私はINITSIZEを<;私は++ ){ 接続connが = したDriverManager.getConnection(URL、ユーザ、パスワード); // 作成したリストで、接続を追加 するSystem.out.printlnを(「最初を作成するには、データベース接続プールを初期化します」 +(I + 1)+ "接続、プールに追加" ); connPool.add(コネティカット); } } キャッチ(IOExceptionをE){ e.printStackTrace(); } キャッチ(ClassNotFoundExceptionがE){ e.printStackTrace( ); } キャッチ(のSQLException E){ e.printStackTrace(); } } / *データベース接続* / パブリック接続のgetConnection()がスローするSQLException { IF(connPool.size()> 0 ){ // コレクションからの接続を取得 決勝接続コン= connPool.removeFirstを(); // のプロキシ接続返す リターンを(接続)たとえば、Proxy.newProxyInstance(ConnPool。クラス .getClassLoader()、conn.getClass()でgetInterfaces()、新しい新規のInvocationHandlerの(){ 公共オブジェクト呼び出しは、([]引数オブジェクト、プロキシ、メソッド、メソッドオブジェクト) スローのThrowable { IFを( !「近いです」.equals(method.getName())){ 戻りMethod.invoke(コネチカット州、引数); } { connPool.add(コネチカット州)を、 するSystem.out.printlnは(「現在の接続、接続プールを閉じ、接続を返します.. ....... " ); のSystem.out.println( "接続のプール番号が"+ connPool.size()); 戻り NULL ; } } }); } { スロー 新しい新規のRuntimeException("ビジーデータベース............後でもう一度試してください" ); } } 公共のPrintWriter getLogWriterメソッド()がスローするSQLException { 戻り ヌル } 公共 ボイド setLogWriter(PrintWriterのうち)スローのSQLException { } 公共 ボイド setLoginTimeout(INT秒)スローするSQLException { } 公共 のint getLoginTimeout()をスローするSQLException { 戻り 0 ; } 公共ロガーgetParentLogger()スロー場合SQLFeatureNotSupportedException { リターン ヌル; } パブリックオブジェクトアンラップ(クラスのiface)がスローするSQLException { 戻り ヌル } パブリック ブール isWrapperFor(クラスのiface)スローのSQLExceptionは{ 返す } パブリック接続のgetConnection(文字列名、文字列のパスワード)が スローするSQLException { 戻り ヌル } }
インポートのjava.sql.Connectionを、
 インポートのjava.sql.ResultSet;
 インポートjava.sql.SQLExceptionという、
 インポートjava.sql.Statementの、

パブリック クラスJdbcUtil { 

    // データベース接続プール
    プライベート 静的 ConnPool ConnPool = 新しい新しいConnPool(); 

    / ** 
     *プールから接続を取得する
     * @return 
     * @throws のSQLException
      * / 
    パブリック 静的接続のgetConnection()スローのSQLException {
         戻り、connPool.getConnectionを()
    } 

    / **  
     *接続を閉じます
     * @Param コネティカット
     * @param ST 
     * @paramのRS 
     * @throws のSQLException 
      * / 
    パブリック 静的な 無効 CloseConnection(接続コネティカット、ステートメントST、のResultSet RS)スローするSQLException { 

        // 閉じるResultSetオブジェクトストアのクエリ結果
        IF(RS!= ヌル){ 
                rs.Close(); 
        } 

        // 近いStatementオブジェクト
        IF!(ST = NULL ){ 
                st.close(); 
        } 

        // 接続を閉じる
        IF =(コネチカットを!NULL ){ 
                はconn.close(); 
        } 
    } 

}

db.properties

ドライバ= com.mysql.cj.jdbc.Driverの
URL = JDBCます。mysql:// localhostを:?3306 /数据库名serverTimezone =アジア/上海&useUnicode =真&characterEncoding = UTF8 &useSslオプション= TRUE 
ユーザー=ルート
パスワード=ルート
INITSIZE = 15

次のように呼び出します。

JdbcUtil jdbcUtil = 新しいJdbcUtil();
  文字列のSQLは= " SQL文を書く " ; 
  = nullの接続接続を; 
  文= NULLの文の;    のResultSetたresultSet = nullを
{トライ
  接続 = jdbcUtil.getConnection(); 
  ステートメント = Connection.createStatement(); 
  たresultSet = Statement.executeQuery(SQL);
    一方(ResultSet.next()){ 
        文字列ID = resultSet.getString( "ID" ); IF( !ID = ヌル){ //ビジネスロジックがここに書き込むことができます      }     }   } キャッチ(例外E){ 
            logger.error( "データ取得失敗" 、E); 
            MSG。= createResultJson(1、 "データ取得失敗!" ); 
   } 最後に{
      試み
        
      


{   jdbcUtil.CloseConnection(接続、ステートメント、たresultSet); //最後の近くに流れを覚えている、あるいは報告あまりにも多くの接続異常を作成します } キャッチ(のSQLException E){ // TODO自動生成されたブロックキャッチ e.printStackTrace(); } }

 

おすすめ

転載: www.cnblogs.com/wangquanyi/p/11446004.html