spring boot连接多数据源以及集成mybatisplus
一、添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
二、配置application.yml文件
注意:url要改为jdbc-url
spring:
datasource:
cloudblog:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://127.0.0.1:3306/cloudblog?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
username: root
password: root
animation:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://127.0.0.1:3306/animation?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
username: root
password: root
三、添加mybatis-plus分页配置文件MybatisPlusConfig.java
package com.wyc.cloudblog.config;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisPlusConfig {
/***
* 分页插件
* @return
*/
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}
}
四、添加配置文件
注意:使用Mybati-plus自带的方法时时必须使用MybatisSqlSessionFactoryBean,用SqlSessionFactoryBean会报错Invalid bound statement (not found):com.wyc.cloudblog.mapper.cloudblog.CategoryMapper.selectList。
如果要使用mybatis-plus分页查询,需要添加bean.setPlugins(mybatisPlusConfig.paginationInterceptor());否则返回值中total会为0。
需要改动的地方
(1)@MapperScan(basePackages = “com.wyc.cloudblog.mapper.cloudblog” …改为自己的包目录结构
(2)@ConfigurationProperties(prefix = “spring.datasource.cloudblog”)改为自己yml文件中配置地址
(3)bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(“classpath*:mapper/cloudblog/*.xml”));改为自己mapper.xml文件路径
application.yml中不需要再配置mapper-locations
4.1 添加AnimationDataSourceConfig.java配置
package com.wyc.cloudblog.config;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.wyc.cloudblog.mapper.animation", sqlSessionFactoryRef = "animationSqlSessionFactory")
public class AnimationDataSourceConfig {
@Autowired
private MybatisPlusConfig mybatisPlusConfig;
@Bean("animationDataSource")
@ConfigurationProperties(prefix = "spring.datasource.animation")
public DataSource getAnimationDataSource(){
return DataSourceBuilder.create().build();
}
/**
* 使用Mybati-plus自带的方法时时必须使用MybatisSqlSessionFactoryBean,用SqlSessionFactoryBean会报错
* Invalid bound statement (not found): com.wyc.cloudblog.mapper.cloudblog.CategoryMapper.selectList
*/
@Bean("animationSqlSessionFactory")
public SqlSessionFactory animationSqlSessionFactory(@Qualifier("animationDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
//添加mybatisplus分页插件,不然分页查询返回值中total为0
bean.setPlugins(mybatisPlusConfig.paginationInterceptor());
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/animation/*.xml"));
return bean.getObject();
}
@Bean(name = "animationTransactionManager")
public DataSourceTransactionManager testTransactionManager(@Qualifier("animationDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean("animationSqlSessionTemplate")
public SqlSessionTemplate animationSqlSessionTemplate(@Qualifier("animationSqlSessionFactory") SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}
4.2 添加CloudBlogDataSourceConfig.java配置
package com.wyc.cloudblog.config;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.wyc.cloudblog.mapper.cloudblog", sqlSessionFactoryRef = "cloudblogSqlSessionFactory")
public class CloudBlogDataSourceConfig {
@Autowired
private MybatisPlusConfig mybatisPlusConfig;
@Bean("cloudblogDataSource")
@ConfigurationProperties(prefix = "spring.datasource.cloudblog")
public DataSource getCloudblogDataSource() {
return DataSourceBuilder.create().build();
}
/**
* 使用Mybati-plus自带的方法时时必须使用MybatisSqlSessionFactoryBean,用SqlSessionFactoryBean会报错
* Invalid bound statement (not found): com.wyc.cloudblog.mapper.cloudblog.CategoryMapper.selectList
*/
@Bean("cloudblogSqlSessionFactory")
public SqlSessionFactory cloudblogSqlSessionFactory(@Qualifier("cloudblogDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
//添加mybatisplus分页插件,不然分页查询返回值中total为0
bean.setPlugins(mybatisPlusConfig.paginationInterceptor());
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/cloudblog/*.xml"));
return bean.getObject();
}
@Bean(name = "cloudblogTransactionManager")
public DataSourceTransactionManager testTransactionManager(@Qualifier("cloudblogDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean("cloudblogSqlSessionTemplate")
public SqlSessionTemplate cloudblogSqlSessionTemplate(@Qualifier("cloudblogSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
五、完整目录结构截图
AnimationMapper.java和AnimationMapper.xml文件照常写即可,此处animation目录下的文件都是操作animation数据库的。cloudblog目录下的文件同理。