目次
DataSourceUitls の概要
DataSourceUitlsがConnectionを取得
getConnectionメソッド
内部実装
doGetConnectionメソッド
fetchConnection メソッド
DataSourceUitls は Connection をリリースします
releaseConnection メソッド
ホームページ Java &#&チュートリアル DataSourceUitls の概要とメソッド

DataSourceUitls の概要とメソッド

Jul 26, 2017 pm 05:01 PM
connection 閉鎖

DataSourceUitls の概要

DataSourceUitls クラスは org.springframework.jdbc.datasource パッケージの下にあり、javax.sql.DataSource から JDBC 接続を取得するための多くの静的メソッドを提供し、Spring トランザクション管理のサポートを提供します。

JdbcTemplate クラス内で、DataSourceUtils が複数回使用されます。実際、コード内で直接 DataSourceUitls を使用して Jdbc を操作することもできます。

DataSourceUitlsがConnectionを取得

getConnectionメソッド

内部実装

    public static Connection getConnection(DataSource dataSource) throws CannotGetJdbcConnectionException {
        try {
            return doGetConnection(dataSource);
        }
        catch (SQLException ex) {
            throw new CannotGetJdbcConnectionException("Failed to obtain JDBC Connection", ex);
        }
        catch (IllegalStateException ex) {
            throw new CannotGetJdbcConnectionException("Failed to obtain JDBC Connection: " + ex.getMessage());
        }
    }
ログイン後にコピー

指定したDataSourceを渡すことでConnectionを取得でき、doGetConnectionメソッドで取得処理が実装されていることがわかります。 SQLException と IllegalStateException がスローされる場合は、それらを CannotGetJdbcConnectionException にラップします。実際には、SQLException と IllegalStateException のみがスローされます。 CannotGetJdbcConnectionException のソース コードを見ると、CannotGetJdbcConnectionException は実際には DataAccessException のサブクラスであることがわかります。したがって、getConnection はスローされた例外を Spring の DataAccessException に均一にカプセル化すると言えます。

doGetConnectionメソッド

内部実装

    public static Connection doGetConnection(DataSource dataSource) throws SQLException {
        Assert.notNull(dataSource, "No DataSource specified");

        ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(dataSource);
        if (conHolder != null && (conHolder.hasConnection() || conHolder.isSynchronizedWithTransaction())) {
            conHolder.requested();
            if (!conHolder.hasConnection()) {
                logger.debug("Fetching resumed JDBC Connection from DataSource");
                conHolder.setConnection(fetchConnection(dataSource));
            }
            return conHolder.getConnection();
        }
        // Else we either got no holder or an empty thread-bound holder here.

        logger.debug("Fetching JDBC Connection from DataSource");
        Connection con = fetchConnection(dataSource);

        if (TransactionSynchronizationManager.isSynchronizationActive()) {
            logger.debug("Registering transaction synchronization for JDBC Connection");
            // Use same Connection for further JDBC actions within the transaction.
            // Thread-bound object will get removed by synchronization at transaction completion.
            ConnectionHolder holderToUse = conHolder;
            if (holderToUse == null) {
                holderToUse = new ConnectionHolder(con);
            }
            else {
                holderToUse.setConnection(con);
            }
            holderToUse.requested();
            TransactionSynchronizationManager.registerSynchronization(
                    new ConnectionSynchronization(holderToUse, dataSource));
            holderToUse.setSynchronizedWithTransaction(true);
            if (holderToUse != conHolder) {
                TransactionSynchronizationManager.bindResource(dataSource, holderToUse);
            }
        }

        return con;
    }
ログイン後にコピー

doGetConnectionメソッドは、実際にConnectionを取得するために使用されるコアメソッドです。ソース コードから、現在のスレッドにバインドされた Connection がない場合、新しい Connection が作成されると結論付けることができます。現在のスレッドのトランザクション同期がアクティブであれば、新しく作成された Connection に Spring トランザクション管理サポートが追加されます。 Connection; if 現在のスレッドに対応する接続​​が存在する場合、現在のトランザクション管理割り当てが存在します。

fetchConnection メソッド

fetchConnection は、一般には公開されていないプライベート メソッドです。実際には、現在の DastaSource から新しい Connection を作成するという単純な機能を実行します。作成が失敗した場合は、新しい Connection が作成されたことを示します。入手できません。

DataSourceUitls は Connection をリリースします

releaseConnection メソッド

内部実装

    public static void releaseConnection(@Nullable Connection con, @Nullable DataSource dataSource) {
        try {
            doReleaseConnection(con, dataSource);
        }
        catch (SQLException ex) {
            logger.debug("Could not close JDBC Connection", ex);
        }
        catch (Throwable ex) {
            logger.debug("Unexpected exception on closing JDBC Connection", ex);
        }
    }
ログイン後にコピー

releaseConnection メソッドの特定の実装は doReleaseConnection によって処理されます。例外がスローされた場合、その例外はログ内でデバッグされるだけであり、外部にはスローされません。このメソッドのパラメータは両方とも NULL です。 con が NULL の場合、この呼び出しは無視されますが、他のパラメータは NULL であっても構いません。

doReleaseConnection メソッド

内部実装

    public static void doReleaseConnection(@Nullable Connection con, @Nullable DataSource dataSource) throws SQLException {
        if (con == null) {
            return;
        }
        if (dataSource != null) {
            ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(dataSource);
            if (conHolder != null && connectionEquals(conHolder, con)) {
                // It's the transactional Connection: Don't close it.
                conHolder.released();
                return;
            }
        }
        logger.debug("Returning JDBC Connection to DataSource");
        doCloseConnection(con, dataSource);
    }
ログイン後にコピー

doReleaseConnection メソッドは、実際に Connection を解放するメソッドです。 releaseConnection メソッドと比較して、渡された 2 つのパラメーターのチェックサムを完了し、下位レベルの例外をスローします。 dataSource が NULL でない場合、この ConnectionHolder によって保持されている現在の接続を解放すると、現在の Connection が再利用できるようになります。これは、Jdbc 操作のパフォーマンスを向上させるのに非常に役立ちます。 dataSource が null の場合は、接続を直接閉じることを選択します。

DataSourceUitlsがConnectionを閉じる

doCloseConnectionメソッド

内部実装

    public static void doCloseConnection(Connection con, @Nullable DataSource dataSource) throws SQLException {
        if (!(dataSource instanceof SmartDataSource) || ((SmartDataSource) dataSource).shouldClose(con)) {
            con.close();
        }
    }
ログイン後にコピー

doReleaseConnectionメソッドでは、データソースがNULLの場合にdoCloseConnectionメソッドが実行されることが分かりました。実際、dataSource が org.springframework.jdbc.datasource.SmartDataSource インターフェイスを実装していない場合、または dataSource が org.springframework.jdbc.datasource.SmartDataSource インターフェイスを実装し、閉じることが許可されている場合にのみ、Connection は実際に閉じられます。

org.springframework.jdbc.datasource.SmartDataSource インターフェースは javax.sql.DataSource インターフェースの拡張であり、ラップされていない形式で Jdbc 接続を返します。このインターフェイスを実装するクラスは、操作の完了後に接続を閉じる必要があるかどうかをクエリできます。このようなチェックは、Srping、DataSourceUitls、および JdbcTemplate で自動的に実行されます。

以上がDataSourceUitls の概要とメソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

360 ブラウザによって推奨される広告をオフにするにはどうすればよいですか? PC で 360 ブラウザによって推奨される広告をオフにする方法は? 360 ブラウザによって推奨される広告をオフにするにはどうすればよいですか? PC で 360 ブラウザによって推奨される広告をオフにする方法は? Mar 14, 2024 am 09:16 AM

360 ブラウザによって推奨される広告をオフにするにはどうすればよいですか?多くのユーザーが 360 ブラウザを使用していると思いますが、このブラウザは時々広告が表示され、多くのユーザーを悩ませています. このサイトでは、お使いのコンピュータで 360 ブラウザが推奨する広告をオフにする方法をユーザーに丁寧に紹介します。コンピュータ上の 360 ブラウザによって推奨される広告をオフにするにはどうすればよいですか?方法 1: 1. 360 セーフ ブラウザを開きます。 2. 右上隅にある「3 本の横棒」のロゴを見つけて、[設定] をクリックします。 3. ポップアップインターフェースの左側のタスクバーで[ラボ]を見つけ、[「360ホットスポット情報」機能を有効にする]にチェックを入れます。方法 2: 1. まずダブルクリックします。

新浪ニュースエクスプレスをオフにする方法?エクスプレス機能をオフにする方法は? 新浪ニュースエクスプレスをオフにする方法?エクスプレス機能をオフにする方法は? Mar 12, 2024 pm 09:46 PM

新浪ニュース ソフトウェアは、基本的に公式プラットフォームによってプッシュされる多くのニュース ヘッドライン情報を提供します。各ニュース記事の内容は本物です。上下にスワイプしてワンクリックで検索および閲覧でき、全体的な読書雰囲気がより快適になります。 。携帯電話番号を入力してオンラインログイン さまざまな分野のニュースチャンネルが開設されています 24時間更新は繰り返されません 国内、海外、地域の時事ニュースが不足しません 上下にスワイプしてワンクリックで選択できます閲覧中です。ニュース コンテンツがすべてです。興味がある場合は、ニュース エクスプレス機能をオフにして、影響を受けないようにすることもできます。いつでも開いて、大量のホット ニュースの見出しをプレビューできます。編集者が提供するようになりました。オンラインの新浪ニュースユーザーへの詳細速達機能の操作手順。新浪ニュースを見つけて右下隅をクリックします

Kuaishou でパスワードなしの支払いを終了する方法 Kuaishou のパスワードなしの支払いを終了する方法に関するチュートリアル Kuaishou でパスワードなしの支払いを終了する方法 Kuaishou のパスワードなしの支払いを終了する方法に関するチュートリアル Mar 23, 2024 pm 09:21 PM

Kuaishou は優れたビデオ プレーヤーです。Kuaishou のパスワード不要の支払い機能は、誰もがよく知っています。日常生活、特にプラットフォームで必要な商品を購入するときに非常に役立ちます。さて、支払いに行きましょう「キャンセルする必要があります。どうすればキャンセルできますか? パスワード不要決済機能を効果的にキャンセルするにはどうすればよいですか? パスワード不要決済のキャンセル方法は非常に簡単です。具体的な操作方法は整理されています。見ていきましょう」このサイトのガイド全体を見てみましょう。このガイドが皆さんのお役に立てれば幸いです。 Kuaishou でパスワードなしで支払いを終了する方法のチュートリアル 1. Kuaishou アプリを開き、左上隅にある 3 本の水平線をクリックします。 2. 「Kuaishou ストア」をクリックします。 3. 上のオプション バーで、パスワードなしの支払いを見つけてクリックします。 4.クリックして応援してください

Windows11セキュリティセンターをオフにする方法を詳しく解説 Windows11セキュリティセンターをオフにする方法を詳しく解説 Mar 27, 2024 pm 03:27 PM

Windows 11 オペレーティング システムでは、セキュリティ センターは、ユーザーがシステムのセキュリティ状態を監視し、マルウェアから防御し、個人のプライバシーを保護するのに役立つ重要な機能です。ただし、特定のソフトウェアをインストールするときやシステム チューニングを実行するときなど、ユーザーがセキュリティ センターを一時的にオフにする必要がある場合があります。この記事では、システムを正しく安全に運用するために、Windows 11 セキュリティ センターをオフにする方法を詳しく紹介します。 1. Windows 11 セキュリティ センターをオフにする方法 Windows 11 では、セキュリティ センターをオフにしても、

Windows 11 でセキュリティ センターをオフにする方法 Windows 11 でセキュリティ センターをオフにする方法 Mar 28, 2024 am 10:21 AM

Windows 11 は Microsoft がリリースした最新のオペレーティング システム バージョンです。以前のバージョンと比較して、Windows 11 ではシステム セキュリティの管理と監視が強化されており、重要な機能の 1 つがセキュリティ センターです。 Security Center は、ユーザーがシステムのセキュリティ ステータスを管理および監視して、システムがマルウェアやその他のセキュリティの脅威から確実に保護されるように支援します。セキュリティ センターはシステム セキュリティを保護するために重要ですが、ユーザーが個人的なニーズやその他の理由でセキュリティ センターを無効にしたい場合があります。この記事ではWの使い方を紹介します。

Windows セキュリティ センターでリアルタイム保護をオフにする方法の詳細な説明 Windows セキュリティ センターでリアルタイム保護をオフにする方法の詳細な説明 Mar 27, 2024 pm 02:30 PM

Windows オペレーティング システムは、世界で最も多くのユーザーを抱えるオペレーティング システムの 1 つとして、常にユーザーに支持されています。ただし、Windows システムを使用する場合、ユーザーはウイルス攻撃、マルウェア、その他の脅威など、多くのセキュリティ リスクに遭遇する可能性があります。システム セキュリティを強化するために、Windows システムには多くのセキュリティ保護メカニズムが組み込まれています。その 1 つが Windows セキュリティ センターのリアルタイム保護機能です。今回はWindowsセキュリティセンターのリアルタイム保護をオフにする方法を詳しく紹介します。まず、しましょう

Pinduoduo で今すぐ使用、後払い機能をオフにする方法 Pinduoduo で今すぐ使用、後払い機能をオフにする方法 Pinduoduo で今すぐ使用、後払い機能をオフにする方法 Pinduoduo で今すぐ使用、後払い機能をオフにする方法 Mar 12, 2024 pm 04:07 PM

Pinduoduo で今すぐ使用して後で支払う機能をオフにする方法は? Pinduoduo は、ユーザーがオンラインで物を購入し、自宅に届けることを可能にする非常にスマートなソフトウェアです。このソフトウェアには多くの種類の製品があります。ユーザーは、購入する必要がある製品を選択できます。より便利にするためにこのソフトウェアを使用するユーザーのために、今すぐ使用後支払い機能を開始しましたが、多くのユーザーがこの機能をキャンセルしたいと考えていますので、以下に編集者が今すぐ使用後支払い機能をキャンセルする方法をまとめましたので、ご参考にしてください。 Pinduoduo で今すぐ使用後支払い機能をオフにする方法 Pinduoduo でオフにする 1. Pinduoduo の個人ホームページに入った後、「設定」をクリックします。 2. 設定で「今すぐ使用、後で支払う設定」をクリックします。 3.

opporeno5 でドルビーアトモスをオフにする場所_opporeno5 でドルビーアトモスを無効にする方法 opporeno5 でドルビーアトモスをオフにする場所_opporeno5 でドルビーアトモスを無効にする方法 Mar 25, 2024 pm 04:41 PM

1. 電話の設定で [音と振動] をクリックします。 2. 「ドルビーアトモス」をクリックします。 3. ドルビーアトモスの後ろのスイッチをオフにします。

See all articles