likes
comments
collection
share

MyBatisPlus 日志的两个坑:生产环境不打日志、多数据源日志配置等

作者站长头像
站长
· 阅读数 46

背景

MyBatis 日志打印踩过三次坑,本文总结这三个问题。

  1. 生产环境下怎么打印 MyBatis 日志。
  2. 多数据源时,配置 mybatis-plus 日志不生效问题。
  3. mybatis-plus 的 log-impl 属性值。

mybatis-plus 的 log-impl 属性值

org.apache.ibatis.logging.stdout.StdOutImpl 可以打印控制台日志,如果要输出 DAO 类的 debug 级别的日志,可以配置:

logging:
  level:
    com.xx.xx.*.dao: debug

生产环境下,需要配置成另一个类:

mybatis-plus:
  configuration:
    # 开启驼峰命名规则自动转换
    map-underscore-to-camel-case: true
    # 日志打印
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl

需要注意的是,这两个日志实现类的路径不相同,今天犯了一个低级错误,配置生产文件时,直接拷贝了最后一个类名称,导致日志配置错误,程序启动失败。

多数据源失效问题

多数据源时,默认的 mybatis-plus 配置不生效,需要单独对对应的数据源配置:

    // 注入 MyBatisPlus 的配置属性
    @Bean
    @ConfigurationProperties(prefix = "mybatis-plus.configuration")
    public MybatisConfiguration globalConfiguration() {
        return new MybatisConfiguration();
    }

    // 特定的数据源
    @Bean(name = "myDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.myDataSource")
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }

    // 数据源作用的会话工厂对象
    @Bean(name = "mySqlSessionFactory")
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("myDataSource") DataSource dataSource, MybatisConfiguration config) throws Exception {
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setPlugins(new Interceptor[]{paginationInterceptor});
        // 当前数据源作用的 Mapper 的配置信息
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:xxx/*.xml"));
        // 设置当前数据源的配置
        bean.setConfiguration(config);

        return bean.getObject();
    }

启示录

mybatis-plus 的 log-impl 属性值,必须保证实现类的全称的正确,谨以此文总结今天遇到的低级错误。