微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用jdbc / hibernate获取当前数据库事务id?

我已经浏览了Google,但找不到任何相关内容.基本上,我想掌握长期运行的交易.

现在,我将浏览information_schema.INNODB_TRX或查看show engine innodb status的输出以查找trx_id,然后打开general_logs以查看正在运行的所有查询.

有没有办法,我可以使用jdbc或hibernate在我的代码中获取此transaction_id,以便我可以在我的服务器日志中记录它?

解决方法:

使用PostgreSQL,您只需运行此本机查询即可获取当前的事务ID:

Number transactionId = (Number) session
   .createSQLQuery("select txid_current()")
   .uniqueResult();

对于MySQL,you need to run 5.7 or later

Number transactionId = (Number) session
   .createSQLQuery(
            "SELECT GTID " +
            "FROM events_transactions_current e " +
            "JOIN performance_schema.threads t ON e.THREAD_ID = t.THREAD_ID " +
            "WHERE t.PROCESSLIST_ID = CONNECTION_ID()")
   .uniqueResult();

或者对于MySQL 5.5:

Number transactionId = (Number) session
   .createSQLQuery(
            "SELECT trx_id " +
            "FROM information_schema.innodb_trx " +
            "WHERE trx_mysql_thread_id = CONNECTION_ID()")
   .uniqueResult();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐