Oracle
Saat menggunakan Oracle, Anda harus menjalankan kueri SQL berikut:
SELECT RAWTOHEX(tx.xid)
FROM v$transaction tx
JOIN v$session s ON tx.ses_addr = s.saddr
v$transaction
view memberikan informasi tentang transaksi database yang sedang berjalan. Namun, mungkin ada beberapa transaksi yang berjalan di sistem kami, dan itulah sebabnya kami bergabung dengan v$transaction
dengan v$session
lihat.
v$session
view menawarkan informasi tentang sesi kami saat ini atau koneksi database. Dengan mencocokkan alamat sesi antara v$transaction
dan v$session
dilihat, kita dapat menemukan pengidentifikasi transaksi yang sedang berjalan yang diberikan oleh xid
kolom di v$transaction
lihat.
Karena xid
kolom bertipe RAW
, kami menggunakan RAWTOHEX
untuk mengonversi nilai biner pengidentifikasi transaksi ke representasi heksadesimalnya.
SQL Server
Saat menggunakan SQL Server, Anda hanya perlu menjalankan kueri SQL berikut:
SELECT CONVERT(VARCHAR, CURRENT_TRANSACTION_ID())
Karena CURRENT_TRANSACTION_ID
fungsi mengembalikan BIGINT
nilai kolom, kami menggunakan CONVERT
untuk mendapatkan representasi String-nya.
PostgreSQL
Saat menggunakan PostgreSQL Server, Anda dapat menjalankan kueri SQL berikut untuk mendapatkan id transaksi saat ini:
SELECT CAST(txid_current() AS text)
Karena txid_current
fungsi mengembalikan BIGINT
nilai kolom, kami menggunakan CAST
untuk mendapatkan representasi String-nya.
MySQL dan MariaDB
Saat menggunakan MySQL atau MariaDB, Anda dapat menjalankan kueri SQL berikut untuk mendapatkan id transaksi saat ini:
SELECT tx.trx_id
FROM information_schema.innodb_trx tx
WHERE tx.trx_mysql_thread_id = connection_id()
innodb_trx
lihat di information_schema
katalog menyediakan informasi tentang transaksi database yang sedang berjalan. Karena mungkin ada beberapa transaksi yang berjalan di sistem kami, kami perlu memfilter baris transaksi dengan mencocokkan sesi atau pengidentifikasi koneksi database dengan sesi yang sedang berjalan.
HSQLDB
Saat menggunakan database HyperSQL, Anda dapat menjalankan kueri SQL berikut untuk mendapatkan id transaksi saat ini:
VALUES (TRANSACTION_ID())
Mencatat id transaksi menggunakan MDC
ID transaksi berguna untuk logging karena memungkinkan kita untuk menggabungkan semua tindakan yang dijalankan dalam konteks transaksi database tertentu.
Dengan asumsi kita telah merangkum kueri SQL di atas dalam transactionId
metode, kita bisa mengekstrak id transaksi saat ini dan meneruskannya ke kerangka Logger sebagai variabel MDC.
Jadi, untuk SLF4J, Anda dapat menggunakan put
metode seperti yang diilustrasikan oleh contoh berikut:
MDC.put("txId", String.format(" TxId: [%s]", transactionId(entityManager)));
MDC (Konteks Diagnostik yang Dipetakan)
adalah untuk mencatat apa ThreadLocal
adalah untuk benang Jawa. Pada dasarnya, MDC memungkinkan Anda untuk mendaftarkan pasangan kunci/nilai yang terbatas pada utas yang sedang berjalan dan yang dapat Anda rujuk saat kerangka kerja logging membuat pesan log.
Untuk mencetak variabel log "txId" ke log, kita perlu menyertakan variabel ini dalam pola appender log:
<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}
pattern digunakan untuk mereferensikan txId
variabel log.