検索
ホームページ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 までご連絡ください。
win11快速启动有必要关闭吗win11快速启动有必要关闭吗Jun 29, 2023 pm 03:10 PM

win11快速启动有必要关闭吗?win11的快速启动可以帮助用户快速完成电脑开机,十分方便。但是也有不少用户认为正常启动比起快速启动,更能让电脑硬件进行充分休息。那么win11的快速启动和正常启动模式到底有什么区别呢?快速启动功能有必要进行关闭吗?今天小编就来给大家详细说明一下吧。win11快速启动和正常启动区别介绍快速启动就是你的电脑没有实现根本意义上的关机。电脑在关机或者休眠后,计算机的内存是无法存储文件的,所以电脑会将内存中的所有内容保存到硬盘中,生成一个指定的文件,而在唤醒休眠或者再次开

win10电脑如何关闭语音识别功能win10电脑如何关闭语音识别功能Jun 29, 2023 pm 05:07 PM

win10电脑如何关闭语音识别功能?相信有很多时候用户使用电脑时都会通过语音识别来快速的完成其他操作。不过也有部分用户在使用电脑的过程中不想要使用这个功能,那么我们要如何去关闭这个语音识别功能呢?下面就和小编一起来看看Win10关闭语音识别的攻略吧。Win10关闭语音识别的攻略1、在开始菜单单击鼠标右键,选择控制面板2、将控制面板【查看方式】修改为大图标,在下面点击语音识别3、点击左侧的高级语音选项4、将下面启动时运行语音识别前面的勾去掉,点击确定即可。

Win11怎样关闭445端口Win11怎样关闭445端口Jul 04, 2023 pm 12:17 PM

  Win11怎样关闭445端口?445号端口是一个TCP端口,是一个共享文件夹和打印机端口,在局域网内提供文件或打印机共享服务。近期有部分Win11用户想要关闭445端口,那么应该如何操作呢?很多小伙伴不知道怎么详细操作,小编下面整理了Win11关闭445端口的详细操作,如果你感兴趣的话,跟着小编一起往下看看吧!  Win11关闭445端口的详细操作  1、首先,按Win+S组合键,或点击底部任务栏上的搜索图标,打开的Windows搜索窗口,顶部输入Windows防火墙,然后点击系统给出的最佳

笔记本win7系统如何关闭触摸版笔记本win7系统如何关闭触摸版Jul 17, 2023 am 10:33 AM

有的用户在使用外接鼠标操作win7电脑的时候,左手老是不小心碰到触摸板导致操作失误,那么在win7系统笔记本如何关闭触摸板呢?下面一起来看看吧。1、打开电脑端底部的主菜单栏,选择如图的【控制面板】。2、进入到面板栏中,点击如图的【硬件和声音】选项。3、然后继续选择打开如图的【鼠标】选项。4、在上方菜单中,找到【触控板】选项,将其打开。5、在这里就可以调节设置触控板的设置属性了。6、将其取消选择,然后点击下方的应用确定,这样就可以关闭触控板了。以上笔记本win7系统关闭触摸板的操作大家学会了没有呢

Win7怎么关闭3D加快?Win7关掉3D加快的方式Win7怎么关闭3D加快?Win7关掉3D加快的方式Jul 07, 2023 pm 04:29 PM

尽管说3D加快可以让视觉冲击有一定的提高,但3D加快作用十分占有运行内存,许多朋友要想关掉这一作用却不知怎么实际操作,那麼碰到这样的情况该怎么办呢?下边就和小编一起来看一看是如何解决的吧。Win7关掉3D加快的方式1、按住“win+r”键盘快捷键,开启运行窗口键入“dxdiag”按回车键开启DirectX确诊专用工具。2、随后将页面转换到“表明”查询,就可以查询到系统软件是不是打开3d加快。3、随后退回到桌面,再度按“win+r”键盘快捷键,开启运行窗口键入“regedit”按回车键开启注册表编

如何停用Win7交互式服务检测?如何停用Win7交互式服务检测?Jun 30, 2023 am 09:33 AM

win7交互式服务检测怎么关闭?各位在使用电脑的过程中,是否有遇到过交互式服务检测这一提示窗口呢?该窗口一般都是由于病毒入侵导致的系统自动防护所引起的,因此我们需要对其十分重视,各位在关闭其之前,最好对电脑进行一次全面杀毒,那么,我们究竟要怎么关闭交互式服务检测这一窗口呢?下面就由小编为大家带来win7交互式服务检测关闭方法。win7交互式服务检测关闭方法1、首先按下左下角的“开始”按钮,然后在弹出的菜单窗口里点击“控制面板”选项。2、把“管理工具”打开后,接下来再点击“服务”。3、接着找到名为

connection error怎么解决connection error怎么解决Nov 07, 2023 am 10:44 AM

解决方法:1、检查网络连接;2、检查服务器状态;3、清除缓存和Cookie;4、检查防火墙和安全软件设置;5、尝试使用其他网络等等。

CONNECTION_REFUSED什么意思CONNECTION_REFUSED什么意思Jul 31, 2023 pm 02:48 PM

CONNECTION_REFUSED是一种网络连接错误,通常会在试图连接到远程服务器时出现。当客户端设备试图建立一个与服务器的网络连接时,如果服务器拒绝该连接请求,就会返回一个CONNECTION_REFUSED错误。常见的原因包括:服务器未启动、服务器无法接受更多的连接请求、服务器防火墙阻止了该连接等。

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

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

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 中国語版

SublimeText3 中国語版

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

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター