データベースへのJDBC接続を記録するための最も基本的な方法上記のが、問題を見ることができ、常により頻繁場合は、データベースへのアクセス場合のように、このアプローチを接続し、密接な関係を作成するために繰り返すことですパフォーマンスは、データベースにアクセスするためのJDBCデータベース接続プールを使用して、以下の複合体は適切ではありません。
mysqlの、データベース接続プールを導入する必要性を駆動することに加えて、この選択はdbcp2ある(同様のC3P0がありますが、アリはドルイド)、実際には、原則はお互いを理解することは非常に簡単に始めることです、データベース接続プールに似ています。
依存性の導入:
<依存> <groupIdを> org.apache.commons </ groupIdを> <たartifactId>コモンズ-dbcp2 </たartifactId> <バージョン> 2.5.0 </バージョン> </依存関係>
この二次クエリデータ:
クエリサービスコード:
パッケージcom.test.database。 インポートのjava.sql.Connection; インポートのjava.sql.ResultSet; 輸入java.sql.Statementの; 輸入javax.annotation.PostConstruct; 輸入org.apache.commons.dbcp2.BasicDataSource。 import org.springframework.stereotype.Service; @サービス パブリック クラスJdbcPooledService { 接続の接続。 BasicDataSourceのBasicDataSource = 新しいのBasicDataSource(); 初期化動作を行うための@PostConstruct //ここで、接続プールの初期化 公共 のボイドinitPool(){ System.out.println( "PostConstructのINIT ....." ); basicDataSource.setDriverClassName( "はcom.mysql.jdbc.Driver" ); basicDataSource.setUsername( "ルート" )。 basicDataSource.setPassword( "ルート" )。 basicDataSource.setUrl( "JDBCます。mysql:// localhostを:3306 /テスト" ); } 公共 のボイド testJdbc()スロー{例外を System.out.println(basicDataSource.getNumActive())。 接続 = basicDataSource.getConnection()。 声明 = connection.createStatement(); 文字列のSQL =「ユーザからの選択*」; ResultSetたresultSet = statement.executeQuery(SQL)。 一方、(resultSet.next()){ System.out.println(resultSet.getString( "名前" )); } resultSet.close(); statement.close(); connection.close(); //接続プールもcloseメソッドを呼び出す必要があるが、今回は近くの接続が閉じていないが、接続プールへの意志も接続バック } }
テストカテゴリ:
パッケージcom.test; 輸入org.springframework.beans.BeansException。 輸入org.springframework.context.ApplicationContext; 輸入org.springframework.context.support.ClassPathXmlApplicationContext; 輸入com.test.database.JdbcPooledService。 パブリック クラスメイン{ パブリック 静的 ボイドメイン(文字列[]引数)がスローBeansException、例外{ ApplicationContextのコンテキスト = 新しい ClassPathXmlApplicationContext( "バネのcontext.xml" )。 context.getBean(TestService。クラス).TEST(); // context.getBean(JdbcService.class).testJdbc(); 以下のために(INT iは= 0; I <10; I ++ ){ System.out.println(I); context.getBean(JdbcPooledService。クラス).testJdbc(); } } }
印刷出力は次のようになります。
PostConstructのINIT .....
テストサービス
0
0
ティム
1
0
ティム
2
0
ティム
3
0
ティム
4
0
ティム
5
0
ティム
6
0
ティム
7
0
ティム
8
0
ティム
9
0
ティム
閉じていない場合は、呼接続の終わりに(また、接続プールへのバックを接続しています):
パッケージcom.test.database。 インポートのjava.sql.Connection; インポートのjava.sql.ResultSet; 輸入java.sql.Statementの; 輸入javax.annotation.PostConstruct; 輸入org.apache.commons.dbcp2.BasicDataSource。 import org.springframework.stereotype.Service; @サービス パブリック クラスJdbcPooledService { 接続の接続。 BasicDataSourceのBasicDataSource = 新しいのBasicDataSource(); @PostConstruct // 初期化動作を行うため、接続プールの初期化 公共 ボイドinitPool(){ System.out.println( "PostConstructのINIT ....." ); basicDataSource.setDriverClassName( "はcom.mysql.jdbc.Driver" ); basicDataSource.setUsername( "ルート" )。 basicDataSource.setPassword( "ルート" )。 basicDataSource.setUrl( "JDBCます。mysql:// localhostを:3306 /テスト" ); } 公共 のボイド testJdbc()スロー{例外を System.out.println(basicDataSource.getNumActive())。 接続 = basicDataSource.getConnection()。 声明 = connection.createStatement(); 文字列のSQL =「ユーザからの選択*」; ResultSetたresultSet = statement.executeQuery(SQL)。 一方、(resultSet.next()){ System.out.println(resultSet.getString( "名前" )); } resultSet.close(); statement.close(); // connection.close(); } }
クラスは次のようにテスト結果を呼び出すために続けます。
PostConstructのINIT .....
テストサービス
0
0
ティム
1
1
ティム
2
2
ティム
3
3
ティム
4
4
ティム
5
5
ティム
6
6
ティム
7
7
ティム
8
8
そこには呼接続に近い方法がありません、そして8であるdbcp2接続のデフォルトの最大数は、その接続を取得するために接続プーリングを使用した場合の最大接続数、注意を払うが、オフにしてください持っているので、現象は8つのコネクションの確立は、もはや、確立されていませんさ接続。
接続のデフォルトの最大数:
パブリック 静的 最終 int型 DEFAULT_MAX_TOTAL = 8;
:ソースの近くの接続方法があり、最終的な呼び出しを取得するために接続プールを呼び出します
メソッドの宣言:
同期の使用を閉じる(公共ボイド)のSQLExceptionスロー
キーの呼び出しを:
pool.returnObject(この);
この接続は、接続プールに戻さ。