项目场景:
SpringBoot+ mybatisplus 配置多数据源
application.properties配置
spring.datasource.algorithm.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.algorithm.jdbc-url=jdbc:mysql://127.0.0.1:3306/algorithm?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false
spring.datasource.algorithm.username=root
spring.datasource.algorithm.password=root1
spring.datasource.event-center.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.event-center.jdbc-url=jdbc:mysql://127.0.0.1:3306/event_center?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false
spring.datasource.event-center.username=root
spring.datasource.event-center.password=roo1
注:多数据源配置情况下,datasource的url需要更改成jdbc-url
数据源1配置:
@Configuration
@MapperScan(basePackages = "com.iwhale.dal.mapper.algorithm",
sqlSessionFactoryRef = "algorithmSessionFactory",
sqlSessionTemplateRef = "algorithmSqlSessionTemplate")
public class AlgorithmDataSourceConfig {
@Primary
@Bean(name = "algorithmDataSource")
@ConfigurationProperties(prefix = "spring.datasource.algorithm")
public DataSource algorithmDataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "algorithmTransactionManager")
public DataSourceTransactionManager algorithmTransactionManager(@Qualifier("algorithmDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Primary
@Bean("algorithmSessionFactory")
public SqlSessionFactory algorithmSessionFactory(@Qualifier("algorithmDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/algorithm/*.xml"));
return bean.getObject();
}
@Primary
@Bean("algorithmSqlSessionTemplate")
public SqlSessionTemplate algorithmSqlSessionTemplate(@Qualifier("algorithmSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
数据源2配置:
@Configuration
@MapperScan(basePackages = "com.iwhale.dal.mapper.eventCenter",
sqlSessionFactoryRef = "eventCenterSessionFactory",
sqlSessionTemplateRef = "eventCenterSqlSessionTemplate")
public class EventCenterDataSourceConfig {
@Bean(name = "eventCenterDataSource")
@ConfigurationProperties(prefix = "spring.datasource.event-center")
public DataSource eventCenterDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "eventCenterTransactionManager")
public DataSourceTransactionManager eventCenterTransactionManager(@Qualifier("eventCenterDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean("eventCenterSessionFactory")
public SqlSessionFactory eventCenterSessionFactory(@Qualifier("eventCenterDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/eventCenter/*.xml"));
return bean.getObject();
}
@Bean("eventCenterSqlSessionTemplate")
public SqlSessionTemplate eventCenterSqlSessionTemplate(@Qualifier("eventCenterSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
问题描述
调用接口是控制台报错:Invalid bound statement (not found)
原因分析:
在创建SqlSessionFactory时,使用的是SqlSessionFactoryBean
解决方案:
SqlSessionFactory时,将SqlSessionFactoryBean换成MybatisSqlSessionFactoryBean。
即:
使用mybatis时,用SqlSessionFactoryBean;
使用mybatis-plus时,使用MybatisSqlSessionFactoryBean
参考链接:https://blog.csdn.net/lizhao1226/article/details/129066606