IK.AM

@making's tech note


Spring BootでLog4JDBCを使う springboot

🗃 {Programming/Java/org/springframework/boot}
🏷 Log4JDBC 🏷 Spring 🏷 Spring Boot 
🗓 Updated at 2014-06-21T02:24:18Z  🗓 Created at 2014-06-21T02:24:18Z   🌎 English Page

Spring BootでLog4JDBCを使う方法というか、DataSourceのカスタマイズ方法。

Spring Boot 1.1.1.RELEASEで確認。この設定方法はバージョンアップの度に変わってきたから注意・・

import net.sf.log4jdbc.Log4jdbcProxyDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class AppConfig {
    @Autowired
    DataSourceProperties properties;
    DataSource dataSource;

    @ConfigurationProperties(prefix = DataSourceAutoConfiguration.CONFIGURATION_PREFIX)
    @Bean(destroyMethod = "close")
    DataSource realDataSource() {
        DataSourceBuilder factory = DataSourceBuilder
                .create(this.properties.getClassLoader())
                .url(this.properties.getUrl())
                .username(this.properties.getUsername())
                .password(this.properties.getPassword());
        this.dataSource = factory.build();
        return this.dataSource;
    }

    @Bean
    DataSource dataSource() {
        return new Log4jdbcProxyDataSource(this.dataSource);
    }
}

プロパティの設定方法は、通常のやり方と同じようにできるはず。

realDataSource()の部分は普通にDataSourceを作成してもいいけど、DataSourceBuilderを使うと

  • org.apache.tomcat.jdbc.pool.DataSource
  • com.zaxxer.hikari.HikariDataSource
  • org.apache.commons.dbcp.BasicDataSource

のうちクラスローダー上にあるものを使う。

最後にdataSource()内(名前が重要)でLog4jdbcProxyDataSourceでくるんでやればOK。

pom.xmlには

<dependency>
  <groupId>org.lazyluke</groupId>
  <artifactId>log4jdbc-remix</artifactId>
  <version>0.2.7</version>
</dependency>

を追加。

logback.xmlには

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <logger name="jdbc" level="OFF"/>
    <logger name="jdbc.sqltiming" level="DEBUG"/>
    <logger name="jdbc.resultsettable" level="ERROR"/><!-- ここはお好みで -->
</configuration>

こんな感じで設定しておけばOK。

JPAだけでなくDataSource経由のすべてのSQLログを出力できるので開発中はかなり便利。

@Profileつけて本番時は普通のDataSourceを返すようにすればいいかも。


✒️️ Edit  ⏰ History  🗑 Delete