Springとデータの接続が漏れる

5068 ワード

Springとデータの接続が漏れる
記事の目次
  • Springとデータ接続漏れ
  • 、Springはデータ接続漏れ問題を避けるための約束
  • 、アナログデータ接続リーク
  • 、事務環境下で、データ接続
  • を‘DataSourceUtils’で取得する.
  • 、事務環境がない場合、データ接続を‘DataSourceUtils’で取得しても、接続漏れを引き起こすことがある
  • .
  • 、`Transation AwareDataSourceProxy`は、データソースをプロキシする
  • .
    一、Springはデータ接続漏れ問題を避けるための承諾
    プログラム内でSpring Daoのテンプレート(JdbcTemplate、HbernaleTemplateなど)を使ってデータアクセスを行う限り、データ接続漏れは必ず発生しません.
    二、アナログデータ接続漏れConnection conn =jdbcTemplate.getDataSource().getConnection()によってデータ接続を取得し、使用が完了したら自動的にデータソースに返却しないと(Connectionを呼び出す方法)、データ接続が漏洩する問題が発生します.コードの例
    三、事務環境では、DataSourceUtilsを通じてデータ接続を取得する.DataSourceUtils.getConnection(DataSource dataSource)方法でデータ接続を取得する:まず、現在トランザクションコンテキストがあるかどうかを確認し、トランザクション管理コンテキストから接続を取得しようとする.取得に失敗したら、直接にデータソースから接続を取得します.接続を取得した後、現在トランザクションコンテキストがあると、トランザクションコンテキストに接続が結合されます.
    したがって、ビジネス環境では、DataSourceUtilsを介してデータ接続を取得することにより、データ接続のリークが発生しない.
    四、事務環境がない場合、DataSourceUtilsを通じてデータ接続を取得しても、接続漏れの原因となります.
    DataSourceUtilsが、トランザクションのコンテキストがない方法でget Connectionを使用して接続を取得すると、依然としてデータ接続のリークを引き起こす.
    この接続をブロックするには、実際にDataSourceUtilsを使って接続を解放するだけです.
    DataSourceUtils.releaseConnection(conn, jdbcTemplate.getDataSource());
    
    五、TransactionAwareDataSourceProxyは、データソースを代理する.
    Transaction AwareDataSourceProxyによってデータソースをプロキシし、データソースオブジェクトはプロキシされた後、事務コンテキスト感知対能力を持つ.データソースをプロキシしてget Connectionに接続を取得し、DataSourceUtils.get Connectionを使用して接続の効果を得るのは同じです.
        <bean id="dataSource"
              class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
            <property name="targetDataSource">
                <bean class="org.apache.commons.dbcp.BasicDataSource"
                      destroy-method="close"
                      p:driverClassName="${jdbc.driverClassName}"
                      p:url="${jdbc.url}"
                      p:username="${jdbc.username}"
                      p:password="${jdbc.password}"/>
            property>
        bean>