Oracle
Oracleを使用する場合は、次のSQLクエリを実行する必要があります。
SELECT RAWTOHEX(tx.xid)
FROM v$transaction tx
JOIN v$session s ON tx.ses_addr = s.saddr
v$transaction ビューは、現在実行中のデータベーストランザクションに関する情報を提供します。ただし、システムで複数のトランザクションが実行されている可能性があるため、v$transactionに参加しています。 v$sessionを使用 ビュー。
v$session ビューは、現在のセッションまたはデータベース接続に関する情報を提供します。 v$transaction間でセッションアドレスを照合する およびv$session ビューでは、xidで指定された現在実行中のトランザクション識別子を見つけることができます v$transactionの列 ビュー。
xid 列のタイプはRAW 、RAWTOHEXを使用しています トランザクション識別子のバイナリ値を16進表現に変換します。
SQL Server
SQL Serverを使用する場合は、次のSQLクエリを実行するだけです。
SELECT CONVERT(VARCHAR, CURRENT_TRANSACTION_ID())
CURRENT_TRANSACTION_IDのため 関数はBIGINTを返します 列の値、CONVERTを使用しています 文字列表現を取得します。
PostgreSQL
PostgreSQLサーバーを使用する場合、次のSQLクエリを実行して、現在のトランザクションIDを取得できます。
SELECT CAST(txid_current() AS text)
txid_current 関数はBIGINTを返します 列の値、CASTを使用しています 文字列表現を取得します。
MySQLとMariaDB
MySQLまたはMariaDBを使用する場合、次のSQLクエリを実行して、現在のトランザクションIDを取得できます。
SELECT tx.trx_id
FROM information_schema.innodb_trx tx
WHERE tx.trx_mysql_thread_id = connection_id()
innodb_trx information_schemaで表示 カタログは、現在実行中のデータベーストランザクションに関する情報を提供します。システムで複数のトランザクションが実行されている可能性があるため、セッションまたはデータベース接続識別子を現在実行中のセッションと照合して、トランザクション行をフィルタリングする必要があります。
HSQLDB
HyperSQLデータベースを使用する場合、次のSQLクエリを実行して、現在のトランザクションIDを取得できます。
VALUES (TRANSACTION_ID())
MDCを使用してトランザクションIDをログに記録する
トランザクションIDは、特定のデータベーストランザクションのコンテキストで実行されたすべてのアクションを集約できるため、ログ記録に役立ちます。
上記のSQLクエリをtransactionIdにカプセル化したと仮定します。
メソッドでは、現在のトランザクションIDを抽出し、それをMDC変数としてLoggerフレームワークに渡すことができます。
したがって、SLF4Jの場合、putを使用できます。 次の例に示すような方法:
MDC.put("txId", String.format(" TxId: [%s]", transactionId(entityManager)));
MDC(マップされた診断コンテキスト)
ThreadLocalをログに記録するためのものです Javaスレッドに対するものです。基本的に、MDCを使用すると、現在実行中のスレッドに限定され、ロギングフレームワークがログメッセージを作成するときに参照できるキーと値のペアを登録できます。
「txId」ログ変数をログに出力するには、この変数をログアペンダーパターンに含める必要があります。
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>TRACE</level>
</filter>
<encoder>
<Pattern>%-5p [%t]:%X{txId} %c{1} - %m%n</Pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
%X{txId} パターンは、txIdを参照するために使用されます ログ変数。