mybatis多数据库配置

mybatis多数据库配置

  • 前言
  • 项目示例结构
  • 数据库配置文件
  • 配置类文件

前言

在实际的项目开发中,会遇到需要连接多个数据库的情况,以下是改造实现连接多个数据库的主要修改配置

项目示例结构

├── src
│   ├── main
│   │   ├── java
│   │   │   ├── com.bl
│   │   │   │   ├── xx
│   │   │   │   │   ├── test1
│   │   │   │   │   │   ├── mapper
│   │   │   │   │   │   │   └── Test1Mapper.java
│   │   │   │   │   │   └── service
│   │   │   │   │   │       └── Test1Service.java
│   │   │   │   │   │   └── controller
│   │   │   │   │   │       └── Test1Controller.java
│   │   │   │   │   │
│   │   │   │   │   ├── test2
│   │   │   │   │   │   ├── mapper
│   │   │   │   │   │   │   └── Test2Mapper.java
│   │   │   │   │   │   └── service
│   │   │   │   │   │       └── Test2Service.java
│   │   │   │   │   │   └── controller
│   │   │   │   │   │       └── Test2Controller.java
│   │   │   │   │   │
│   │   │   │   │   ├── config
│   │   │   │   │   │   ├── DataSourceConfig.java
│   │   │   │   │   │   ├── DataSourcetest1Config.java
│   │   │   │   │   │   └── DataSourcetest2Config.java
│   │   │   │   │   │
│   │   │   │   │   ├── MybatisMultiDatasourceApplication.java
│   │   │   │   │   └── pojo
│   │   │   │   │       └── User.java
│   │   │   │   │
│   │   │   │   └── resources
│   │   │   │       ├── application.properties
│   │   │   │       ├── mapper_test1
│   │   │   │       │   └── Test1Mapper.xml
│   │   │   │       └── mapper_test2
│   │   │   │           └── Test2Mapper.xml
│   │   │   └── test
│   │   └── pom.xml

数据库配置文件

application.properties 配置文件

#test1 数据库
spring.datasource.test1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.test1.jdbc-url=jdbc:mysql://192.168.240.110:31552/xx?characterEncoding=utf-8&autoReconnect=true&serverTimezone=Asia/Shanghai&allowMultiQueries=true
spring.datasource.test1.username=
spring.datasource.test1.password=
# test2数据库
spring.datasource.test2.driver-class-name = com.mysql.cj.jdbc.Driver
spring.datasource.test2.jdbc-url = jdbc:mysql://192.168.240.46:3306/xx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&allowMultiQueries=true
spring.datasource.test2.username = 
spring.datasource.test2.password = 

配置类文件

新建DataSourceConfig 配置文件

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 javax.sql.DataSource;

@Configuration
public class DataSourceConfig {

    // dataSourcetest1注解是在没有指明使用哪个数据源的时候指定默认使用的主数据源 DataSourcetest1Config
    @Primary
    @Bean("dataSourcetest1")
    @ConfigurationProperties(prefix = "spring.datasource.test1")
    public DataSource dataSourcetest1() {
        return DataSourceBuilder.create().build();
    }
    // DataSourcetest2Config
    @Bean("dataSourcetest2")
    @ConfigurationProperties(prefix = "spring.datasource.test2")
    public DataSource dataSourcetest2() {
        return DataSourceBuilder.create().build();
    }

    
    @Bean
    @ConfigurationProperties(prefix = "mybatis.configuration")
    public org.apache.ibatis.session.Configuration globalConfiguration() {
        return new org.apache.ibatis.session.Configuration();
    }
    

新建DataSourcetest1Config 配置文件


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.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;


@Configuration
@MapperScan(
        basePackages = "com.bl.xx.test1.mapper",
        sqlSessionFactoryRef = "sqlSessionFactorytest1",
        sqlSessionTemplateRef = "sqlSessionTemplatetest1")
public class DataSourcetest1Config {

    // mapper扫描xml文件的路径
    private static final String MAPPER_LOCATION = "classpath:mapper_test1/*.xml";

    private DataSource dataSourcetest1;

	// 通过构造方法进行注入
    public DataSourcetest1Config(@Qualifier("dataSourcetest1") DataSource dataSourcetest1) {
        this.dataSourcetest1 = dataSourcetest1;
    }

    @Bean
    public SqlSessionFactory sqlSessionFactorytest1() throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        // 指定数据源
        sqlSessionFactoryBean.setDataSource(dataSourcetest1);
        org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
        configuration.setMapUnderscoreToCamelCase(false);
        sqlSessionFactoryBean.setConfiguration(configuration);
        /*
			获取xml文件资源对象
			当Mapper接口所对应的.xml文件与Mapper接口文件分离,存储在 resources 
			文件夹下的时候,需要手动指定.xml文件所在的路径
		*/ 
        Resource[] resources = new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION);
        sqlSessionFactoryBean.setMapperLocations(resources);

        return sqlSessionFactoryBean.getObject();
    }
    
    @Bean
    public SqlSessionTemplate sqlSessionTemplatetest1() throws Exception {
        return new SqlSessionTemplate(sqlSessionFactorytest1());
    }
    
}

注意:

  • basePackages 是你的mapper类所在目录,请注意test1与test2mapper文件类拆开
  • MAPPER_LOCATION 是你的mapper xml所在目录,一般也放在resources目录下
  • DataSource 是DataSourceConfig 里的test1 数据库对应函数名

你可能感兴趣的:(mybatis多数据库,mybatis多数据库配置,多数据库配置)