Springとデータの接続が漏れる
5068 ワード
Springとデータの接続が漏れる
記事の目次 Springとデータ接続漏れ 、Springはデータ接続漏れ問題を避けるための約束 、アナログデータ接続リーク 、事務環境下で、データ接続 を‘DataSourceUtils’で取得する.、事務環境がない場合、データ接続を‘DataSourceUtils’で取得しても、接続漏れを引き起こすことがある .、`Transation AwareDataSourceProxy`は、データソースをプロキシする .
一、Springはデータ接続漏れ問題を避けるための承諾
プログラム内でSpring Daoのテンプレート(JdbcTemplate、HbernaleTemplateなど)を使ってデータアクセスを行う限り、データ接続漏れは必ず発生しません.
二、アナログデータ接続漏れ
三、事務環境では、
したがって、ビジネス環境では、
四、事務環境がない場合、
DataSourceUtilsが、トランザクションのコンテキストがない方法でget Connectionを使用して接続を取得すると、依然としてデータ接続のリークを引き起こす.
この接続をブロックするには、実際にDataSourceUtilsを使って接続を解放するだけです.
Transaction AwareDataSourceProxyによってデータソースをプロキシし、データソースオブジェクトはプロキシされた後、事務コンテキスト感知対能力を持つ.データソースをプロキシしてget Connectionに接続を取得し、DataSourceUtils.get Connectionを使用して接続の効果を得るのは同じです.
記事の目次
一、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>