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ファイルに依存を追加する必要があります.
    <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