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
を参照するために使用されます ログ変数。