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 を参考にさせて頂きました。
ありがとうございます。

 
comments powered by Disqus