Domaで実行したSQLを取得する
アプリで実行したSQLをDBに保存するという要件があるのですが、
Spring + Domaで実現する方法がわからず、GitHubのDomaリポジトリに質問して教えて頂きました。
@nakamura_toさんありがとうございます。
質問した内容は こちら です。
以下の方法で実現出来ました。
今回使っているDIコンテナはSpringです。
-
org.seasar.doma.jdbc.JdbcLoggerインターフェースを実装したクラスを作る。
今回はデフォルトのJdbcLoggerであるUtilLoggingJdbcLoggerを継承したMyLoggerというクラスを作りました -
DomaConfigのgetJdbcLogger()をOverrideして、MyLoggerが使われるように設定する。
-
MyLogger#logSqlで、Sqlクラス(実行したSQL情報が入っている)をThreadLocalに保存。
-
MyLoggerをコンポーネント化して、実行SQLを取得したいクラスでDI。MyLoggerのThreadLocalからSqlクラスを取り出す。
という流れです。
サンプルソースは ここ に置いてます。
Seasar2の SqlLogRegistryImpl を参考にさせて頂きました。
ありがとうございます。