Springデータベース接続プールdruidの構成
12790 ワード
接続プールの原理
接続プールの基本的な考え方は、システムが初期化されると、データベース接続をオブジェクトとしてメモリに格納し、ユーザーがデータベースにアクセスする必要がある場合、新しい接続を確立するのではなく、接続プールから確立された空き接続オブジェクトを取り出すことです.使用が完了すると、ユーザーは接続を閉じるのではなく、次のリクエストアクセスのために接続プールに接続を戻します.接続の確立、切断は、接続プール自体が管理します.また、接続プールのパラメータを設定することで、接続プール内の初期接続数、接続の上下限数、接続ごとの最大使用回数、最大アイドル時間などを制御したり、独自の管理メカニズムでデータベース接続の数、使用状況などを監視したりすることもできます.
共通データベース接続プールと特徴 dbcp:DBPPはJakarta commons-poolオブジェクトプールメカニズムに依存するデータベース接続プールである.DBCPはアプリケーションで直接使用でき、TomcatのデータソースではDBCPが使用されます. c 3 p 0:c 3 p 0は、jdbc 3およびjdbc 2拡張仕様の説明を実装するConnectionおよびStatementプールのData Sourcesオブジェクトを含む、libディレクトリでHibernateとともに公開されたオープンソースのJDBC接続プールです. druid:アリ出品、淘宝と支付宝専用データベース接続プールですが、データベース接続プールだけでなく、ProxyDriver、一連の内蔵JDBCコンポーネントライブラリ、SQL Parserも含まれています.Oracle、MySql、Derby、Postgresql、SQL Server、H 2など、すべてのJDBC互換データベースをサポートします.Druidは、OracleのPS Cacheメモリ占有最適化、MySqlのping検出最適化など、OracleとMySqlに対して特別な最適化を行いました.DruidはMySql、Oracle、Postgresql、SQL-92のSQLの完全なサポートを提供しています.これは手書きの高性能SQL Parserで、Visitorモードをサポートし、SQLの抽象構文ツリーを分析するのに便利です.単純SQL文は10マイクロ秒以内、複雑SQLは30マイクロ秒です.Druidによって提供されるSQL Parserは、JDBCレイヤでSQLをブロックして対応する処理を行うことができます.たとえば、ライブラリのサブテーブル、監査などです.DruidがSQL注入攻撃を防御するWallFilterは、DruidのSQL Parser分析の意味で実現される.
Springでdruid接続プールを構成する
druidの性能はdbcpとc 3 p 0より優れているため、後の2つを加えるとあまり更新されていないので、ここではdruidの構成方法だけを紹介します.
まずpomファイルに依存を追加する必要があります.
springでのアプリケーションContext.xmlでdruidを構成するには:
DruidDataSource構成プロパティリスト
DruidDataSource構成はDBPP対応ですが、個別構成の意味が異なります.
コンフィギュレーション
デフォルト値
説明
name
この属性を構成する意味は,複数のデータソースが存在する場合,モニタリング時に名前で区別できることである.構成がない場合は、「DataSource-」+Systemという名前が生成されます.identityHashCode(this). また、この属性は少なくとも1.0である.5バージョンでは機能しませんが、nameを強制的に設定するとエラーが発生します.詳細-ここをクリックします.
url
データベースに接続するurlは、データベースによって異なります.例:mysql:jdbc:mysql://10.20.153.104:3306/druid2oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto
username
データベースに接続するユーザー名
password
データベースに接続するパスワード.パスワードをプロファイルに直接書かない場合は、ConfigFilterを使用します.詳しくはこちら
driverClassName
urlによる自動認識
このオプションは、druidを構成しないとurlに基づいてdbTypeが自動的に認識され、対応するdriverClassNameが選択されます.
initialSize
0
初期化時に物理接続が確立された個数.初期化は、initメソッドを呼び出すか、最初のgetConnectionを表示するときに発生します.
maxActive
8
最大接続プール数
maxIdle
8
もう使わないから、配置しても効果がない.
minIdle
最小接続プール数
maxWait
接続の取得時の最大待機時間(ミリ秒単位).maxWaitを構成すると、デフォルトでフェアロックが有効になり、同時に効率が低下します.必要に応じてuseUnfairLockプロパティをtrueに設定して非フェアロックを使用できます.
poolPreparedStatements
false
preparedStatement、すなわちPSCacheをキャッシュするかどうか.PSCacheは、カーソルをサポートするデータベースのパフォーマンスを大幅に向上させます.例えばoracleです.mysqlで閉じることをお勧めします.
maxPoolPreparedStatementPerConnectionSize
-1
PSCacheを有効にするには、0より大きく設定する必要があります.0より大きい場合、poolPreparedStatementsは自動的にtrueに変更をトリガーします.Druidでは、Oracleの下でPSCacheがメモリを消費しすぎるという問題はありません.この数値を100など大きく設定できます.
validationQuery
接続が有効かどうかを検出するために使用されるsqlは、クエリー文であり、select'x'が一般的であることが要求されます.validationQueryがnullの場合、testOnBorrow、testOnReturn、testWhileIdleは機能しません.
validationQueryTimeout
単位:秒、接続が有効かどうかを検出するタイムアウト時間.下位レベルでjdbc Statementオブジェクトを呼び出すvoid setQueryTimeout(int seconds)メソッド
testOnBorrow
true
接続を申請するときにvalidationQueryを実行して接続が有効かどうかを検出し、この構成をするとパフォーマンスが低下します.
testOnReturn
false
接続を返すときにvalidationQueryを実行して接続が有効かどうかを検出し、この構成をするとパフォーマンスが低下します.
testWhileIdle
false
パフォーマンスに影響を及ぼさず、セキュリティを保証するtrueに設定することをお勧めします.接続を申請するときに、timeBetweenEveictionRunsMillisより空き時間が大きい場合は、validationQueryを実行して接続が有効かどうかを検出します.
timeBetweenEvictionRunsMillis
1分(1.0.14)
2つの意味があります.1)Destroyスレッドは接続の間隔時間を検出し、接続の空き時間がminEveictableIdleTimeMillis以上の場合は物理接続を閉じます.2)testWhileIdleの判断根拠、testWhileIdle属性の説明を詳しく見る
numTestsPerEvictionRun
30分(1.0.14)
使用しなくなりました.1つのDruidDataSourceは1つのEvictionRunのみをサポートします.
minEvictableIdleTimeMillis
接続は駆逐されずに空きを保つ最長時間
connectionInitSqls
物理接続初期化時に実行されるsql
exceptionSorter
dbTypeによる自動認識
データベースがリカバリ不可能な例外を放出すると、接続が破棄されます.
filters
属性タイプは文字列で、別名で拡張プラグインを構成します.よく使われるプラグインは、統計を監視するためのfilter:statログ用のfilter:log 4 j防御sql注入のfilter:wallです.
proxyFilters
タイプはListであり、filtersとproxyFiltersが同時に構成されている場合は、組合せ関係であり、置換関係ではない
Druidのモニタ統計機能
1.StatFilterの構成
Druidには、監視情報を統計するためのStatFilterが内蔵されています.
構成の詳細は、公式ドキュメントを参照してください.
https://github.com/alibaba/druid/wiki/構成_StatFilter
2.StatViewサーブレットの構成
Druidビルトインには、Druidの統計を表示するためのStatViewサーブレットが用意されています.
構成の詳細は、公式ドキュメントを参照してください.
https://github.com/alibaba/druid/wiki/構成_StatViewServicelet構成
詳細については、公式ドキュメントを参照してください.
https://github.com/alibaba/druid/wiki/トップページ
転載先:https://www.cnblogs.com/Jason-Xiang/p/6586311.html
接続プールの基本的な考え方は、システムが初期化されると、データベース接続をオブジェクトとしてメモリに格納し、ユーザーがデータベースにアクセスする必要がある場合、新しい接続を確立するのではなく、接続プールから確立された空き接続オブジェクトを取り出すことです.使用が完了すると、ユーザーは接続を閉じるのではなく、次のリクエストアクセスのために接続プールに接続を戻します.接続の確立、切断は、接続プール自体が管理します.また、接続プールのパラメータを設定することで、接続プール内の初期接続数、接続の上下限数、接続ごとの最大使用回数、最大アイドル時間などを制御したり、独自の管理メカニズムでデータベース接続の数、使用状況などを監視したりすることもできます.
共通データベース接続プールと特徴
Springでdruid接続プールを構成する
druidの性能はdbcpとc 3 p 0より優れているため、後の2つを加えるとあまり更新されていないので、ここではdruidの構成方法だけを紹介します.
まずpomファイルに依存を追加する必要があります.
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version> version>
dependency>
springでのアプリケーションContext.xmlでdruidを構成するには:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc_url}" />
<property name="username" value="${jdbc_user}" />
<property name="password" value="${jdbc_password}" />
<property name="filters" value="stat" />
<property name="maxActive" value="20" />
<property name="initialSize" value="1" />
<property name="minIdle" value="1" />
<property name="maxWait" value="60000" />
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="poolPreparedStatements" value="true" />
<property name="maxOpenPreparedStatements" value="20" />
bean>
DruidDataSource構成プロパティリスト
DruidDataSource構成はDBPP対応ですが、個別構成の意味が異なります.
コンフィギュレーション
デフォルト値
説明
name
この属性を構成する意味は,複数のデータソースが存在する場合,モニタリング時に名前で区別できることである.構成がない場合は、「DataSource-」+Systemという名前が生成されます.identityHashCode(this). また、この属性は少なくとも1.0である.5バージョンでは機能しませんが、nameを強制的に設定するとエラーが発生します.詳細-ここをクリックします.
url
データベースに接続するurlは、データベースによって異なります.例:mysql:jdbc:mysql://10.20.153.104:3306/druid2oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto
username
データベースに接続するユーザー名
password
データベースに接続するパスワード.パスワードをプロファイルに直接書かない場合は、ConfigFilterを使用します.詳しくはこちら
driverClassName
urlによる自動認識
このオプションは、druidを構成しないとurlに基づいてdbTypeが自動的に認識され、対応するdriverClassNameが選択されます.
initialSize
0
初期化時に物理接続が確立された個数.初期化は、initメソッドを呼び出すか、最初のgetConnectionを表示するときに発生します.
maxActive
8
最大接続プール数
maxIdle
8
もう使わないから、配置しても効果がない.
minIdle
最小接続プール数
maxWait
接続の取得時の最大待機時間(ミリ秒単位).maxWaitを構成すると、デフォルトでフェアロックが有効になり、同時に効率が低下します.必要に応じてuseUnfairLockプロパティをtrueに設定して非フェアロックを使用できます.
poolPreparedStatements
false
preparedStatement、すなわちPSCacheをキャッシュするかどうか.PSCacheは、カーソルをサポートするデータベースのパフォーマンスを大幅に向上させます.例えばoracleです.mysqlで閉じることをお勧めします.
maxPoolPreparedStatementPerConnectionSize
-1
PSCacheを有効にするには、0より大きく設定する必要があります.0より大きい場合、poolPreparedStatementsは自動的にtrueに変更をトリガーします.Druidでは、Oracleの下でPSCacheがメモリを消費しすぎるという問題はありません.この数値を100など大きく設定できます.
validationQuery
接続が有効かどうかを検出するために使用されるsqlは、クエリー文であり、select'x'が一般的であることが要求されます.validationQueryがnullの場合、testOnBorrow、testOnReturn、testWhileIdleは機能しません.
validationQueryTimeout
単位:秒、接続が有効かどうかを検出するタイムアウト時間.下位レベルでjdbc Statementオブジェクトを呼び出すvoid setQueryTimeout(int seconds)メソッド
testOnBorrow
true
接続を申請するときにvalidationQueryを実行して接続が有効かどうかを検出し、この構成をするとパフォーマンスが低下します.
testOnReturn
false
接続を返すときにvalidationQueryを実行して接続が有効かどうかを検出し、この構成をするとパフォーマンスが低下します.
testWhileIdle
false
パフォーマンスに影響を及ぼさず、セキュリティを保証するtrueに設定することをお勧めします.接続を申請するときに、timeBetweenEveictionRunsMillisより空き時間が大きい場合は、validationQueryを実行して接続が有効かどうかを検出します.
timeBetweenEvictionRunsMillis
1分(1.0.14)
2つの意味があります.1)Destroyスレッドは接続の間隔時間を検出し、接続の空き時間がminEveictableIdleTimeMillis以上の場合は物理接続を閉じます.2)testWhileIdleの判断根拠、testWhileIdle属性の説明を詳しく見る
numTestsPerEvictionRun
30分(1.0.14)
使用しなくなりました.1つのDruidDataSourceは1つのEvictionRunのみをサポートします.
minEvictableIdleTimeMillis
接続は駆逐されずに空きを保つ最長時間
connectionInitSqls
物理接続初期化時に実行されるsql
exceptionSorter
dbTypeによる自動認識
データベースがリカバリ不可能な例外を放出すると、接続が破棄されます.
filters
属性タイプは文字列で、別名で拡張プラグインを構成します.よく使われるプラグインは、統計を監視するためのfilter:statログ用のfilter:log 4 j防御sql注入のfilter:wallです.
proxyFilters
タイプはListであり、filtersとproxyFiltersが同時に構成されている場合は、組合せ関係であり、置換関係ではない
Druidのモニタ統計機能
1.StatFilterの構成
Druidには、監視情報を統計するためのStatFilterが内蔵されています.
構成の詳細は、公式ドキュメントを参照してください.
https://github.com/alibaba/druid/wiki/構成_StatFilter
2.StatViewサーブレットの構成
Druidビルトインには、Druidの統計を表示するためのStatViewサーブレットが用意されています.
構成の詳細は、公式ドキュメントを参照してください.
https://github.com/alibaba/druid/wiki/構成_StatViewServicelet構成
詳細については、公式ドキュメントを参照してください.
https://github.com/alibaba/druid/wiki/トップページ
転載先:https://www.cnblogs.com/Jason-Xiang/p/6586311.html