SpringBoot使用mybatis-plus配置多个数据源,实现项目中从两个不同的数据库读取数据

SpringBoot使用mybatis-plus配置多个数据源,实现项目中从两个不同的数据库读取数据

1、添加依赖包

<properties>
    <java.version>1.8</java.version>
    <mybatis.version>2.1.2</mybatis.version>
    <mybatis.plugin.version>3.4.2</mybatis.plugin.version>
    <pagehelper.version>1.3.0</pagehelper.version>
</properties>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>${mybatis.version}</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>${mybatis.plugin.version}</version>
</dependency>
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>${pagehelper.version}</version>
</dependency>

2、禁止SpringBoot自动配置数据源

在启动类注解上添加exclud

import com.github.jeffreyning.mybatisplus.conf.EnableMPP;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.web.server.ConfigurableWebServerFactory;
import org.springframework.boot.web.server.ErrorPage;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpStatus;

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableMPP
public class BackApplication {

public static void main(String[] args) {
SpringApplication.run(BackApplication.class, args);
}

/**
* 解决部署之后刷新页面404问题
* @return
*/
@Bean
public WebServerFactoryCustomizer<ConfigurableWebServerFactory> webServerFactoryCustomizer(){
return factory -> {
ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/");
factory.addErrorPages(error404Page);
};
}
}

3、配置文件application.yml添加数据库信息

spring:
  datasource:
    db1:
      type: com.zaxxer.hikari.HikariDataSource
      driverClassName: com.mysql.cj.jdbc.Driver
      jdbc-url: jdbc:mysql://xxx/aaa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=true&serverTimezone=GMT%2B8
      username: xxx
      password: xxx
    db2:
      type: com.zaxxer.hikari.HikariDataSource
      driverClassName: com.mysql.cj.jdbc.Driver
      jdbc-url: jdbc:mysql://xxx/bbb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=true&serverTimezone=GMT%2B8
      username: xxx
      password: xxx

4、代码中配置db1和db2的数据源

新建类Db1DataSourceConfig

配置MapperLocation路径和MapperScan扫描路径

 
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.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.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "com.xxx.xxx.mapper.db1.**",sqlSessionFactoryRef = "SqlSessionFactory1")
public class Db1DataSourceConfig {
    @Primary
@Bean(name = "DataSource1")
@ConfigurationProperties(prefix = "spring.datasource.db1")
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}

@Primary
@Bean(name = "SqlSessionFactory1")
public SqlSessionFactory testSqlSessionFactory(@Qualifier("DataSource1") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/db1/*.xml"));
//bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:db1/*.xml"));
return bean.getObject();
}

@Primary
@Bean(name = "TransactionManager1")
public DataSourceTransactionManager testTransactionManager(@Qualifier("DataSource1") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}

@Primary
@Bean(name = "SqlSessionTemplate1")
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("SqlSessionFactory1") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}

新建类Db2DataSourceConfig

 
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
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.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.xxx.xxx.mapper.db2.**",sqlSessionFactoryRef = "SqlSessionFactory2")
public class Db2DataSourceConfig {
@Resource
private MyBatisPlusConfig myBatisPlusConfig;
// @Primary
@Bean(name = "DataSource2")
@ConfigurationProperties(prefix = "spring.datasource.db2")
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}

// @Primary
@Bean(name = "SqlSessionFactory2")
public SqlSessionFactory testSqlSessionFactory(@Qualifier("DataSource2") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
bean.setDataSource(dataSource);
//获取mybatis-plus全局配置
GlobalConfig globalConfig = GlobalConfigUtils.defaults();
//mybatis-plus全局配置设置元数据对象处理器为自己实现的那个
globalConfig.setMetaObjectHandler(new MyMetaObjectHandler()); // 手动注入MetaObjectHandler,否则双数据库的时候无法自动填充create_time和update_time
bean.setGlobalConfig(globalConfig);
     bean.setPlugins(myBatisPlusConfig.paginationInterceptor());
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/db2/*.xml"));
return bean.getObject();
}

// @Primary
@Bean(name = "TransactionManager2")
public DataSourceTransactionManager testTransactionManager(@Qualifier("DataSource2") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}

// @Primary
@Bean(name = "SqlSessionTemplate2")
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("SqlSessionFactory2") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}

5.新建mapper java 文件
mapper下新建db1与db2文件夹
查询不同数据库分别放入不同文件夹下

 

 


6.新建resources/mapper/
下新建db1与db2文件夹
查询不同数据库分别放入不同文件夹下

 

 



至此配置完成

posted @ 2022-09-27 11:08  全琪俊  阅读(1863)  评论(0编辑  收藏  举报