springboot | mybatis实现多数据源配置

使用@configuration和配置文件,实现多数据源配置

配置文件

spring:
  application:
    name: application
  datasource:
    data1:
      driver-class-name: com.mysql.cj.jdbc.Driver
      type: com.zaxxer.hikari.HikariDataSource
      jdbc-url: jdbc:mysql:#########
      username: #########
      password: #########
    data2:
      driver-class-name: com.mysql.cj.jdbc.Driver
      type: com.zaxxer.hikari.HikariDataSource
      jdbc-url: jdbc:mysql:###########
      username: ########
      password: ###########
    hikari:
      pool-name: Hikari
      auto-commit: false

数据源1配置文件代码

package com.****.****.****.****.config;


import com.baomidou.mybatisplus.core.MybatisConfiguration;
import org.apache.ibatis.logging.stdout.StdOutImpl;
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.beans.factory.annotation.Value;
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 org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;



@Configuration
@EnableTransactionManagement
//java数据源1的 mapper 扫描路径
@MapperScan(basePackages = "com.*****.****.*****.****.dao.mapper.data1", sqlSessionTemplateRef = "slaveSqlSessionTemplate")
public class DataSource1Config {


    @Bean("slaveDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.data1")
    public DataSource slaveDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "slaveSqlSessionFactory")
    public SqlSessionFactory slaveSqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //设置slave数据源1 mapper对应xml的文件路径
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/data1/*.xml"));
        MybatisConfiguration config = new MybatisConfiguration();
        // 开启驼峰命名法
        config.setMapUnderscoreToCamelCase(true);
        //mybatis自带分页的支持
        config.addInterceptor(new PaginationInterceptor());
        config.setCacheEnabled(false);
        bean.setConfiguration(config);
        MybatisConfiguration mybatisConfiguration = new MybatisConfiguration();
        mybatisConfiguration.setLogImpl(StdOutImpl.class);
        return bean.getObject();
    }

    @Bean(name = "slaveTransactionManager")
    public DataSourceTransactionManager slaveTransactionManager(@Qualifier("slaveDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "slaveSqlSessionTemplate")
    public SqlSessionTemplate slaveSqlSessionTemplate(@Qualifier("slaveSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

数据源2的配置代码,和数据源1配置的代码基本一致,

①修改@ConfigurationProperties,前缀改为数据源2的前缀
②修改一下mapper接口的包扫描路径
③修改xml文件扫描路径

你可能感兴趣的:(mybatis,spring,boot,java)