前言
在日常开发中,我们需要在控制台打印sql语句,用于查找问题等。本文主要介绍使用springboot+mybatis-plus框架下,配置多数据源打印sql语句失效的问题。
1、单数据源
通过增加以下配置,即可在控制台打印日志:
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
2、多数据源
2.1、问题
仍然添加了上述配置,控制台报错:
2.2、解决办法
在每个数据源初始化的时候,往SqlSessionFactoryBean分别set一个MybatisConfiguration对象,MybatisConfiguration对象需要设置setLogImpl方法,方法的参数就是上述的配置value,即org.apache.ibatis.logging.stdout.StdOutImpl。
比如:
@Configuration
@MapperScan(basePackages = "com.yskj.skywalking.dao.demo", sqlSessionFactoryRef = "demoSqlSessionFactory")
public class DemoDataSourceConfig {
@Bean(name = "demoDataSource")
@ConfigurationProperties(prefix = "spring.demo.datasource")
public DruidDataSource demoDataSource() {
return new DruidDataSource();
}
@Bean(name = "demoSqlSessionFactory")
public SqlSessionFactory demoSqlSessionFactory(@Qualifier("demoDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
MybatisConfiguration mybatisConfiguration = new MybatisConfiguration();
mybatisConfiguration.setLogImpl(org.apache.ibatis.logging.stdout.StdOutImpl.class);
bean.setConfiguration(mybatisConfiguration);
bean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath*:mapper/demo/*Mapper.xml"));
return bean.getObject();
}
@Bean(name = "demoSqlSessionTemplate")
@Primary
public SqlSessionTemplate demoSqlSessionTemplate(@Qualifier("demoSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
2.3、分析原因
我们配置多数据源时,重新定义了SqlSessionFactory,因此,如果要打印sql 语句的话,需在我们配置每个数据源的SqlSessionFactory时都要添加mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl配置,就像每个数据源都配置jdbc连接参数:用户名、密码、地址一样。