springboot手动配置多数据源

Posted 可——叹——落叶飘零

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot手动配置多数据源相关的知识,希望对你有一定的参考价值。

文章目录

yml

spring:
  datasource: # 数据库链接
    otc:
      jdbc-url: jdbc:mysql://x.x.x.x:3306/db1_v1?useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
      username: root
      password: ENC(0BB79lsvpyt/Vj4fEVfITHOMGu7YuLf0)  #数据库名、用户名和密码改为自己的
      driver-class-name: com.mysql.cj.jdbc.Driver
      mapper-locations: classpath*:mapper/otcmapper/*.xml
    db2:
      jdbc-url: jdbc:sqlserver://x.x.x.x:1433;DatabaseName=db2_v1
      username: root
      password: 123456  #数据库名、用户名和密码改为自己的
      driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
      mapper-locations: classpath*:mapper/plmmapper/*.xml

配置类

启动类添加注解参数,排除自动配置数据源
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
配置第一个数据源
其余的数据源按照以下规则再写配置类即可

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.plugin.Interceptor;
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.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.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "com.batch.otc.otc.mapper", sqlSessionFactoryRef = "otcSqlSessionFactory")
public class OtcDataSourceConfig 
    @Value("$spring.datasource.otc.mapper-locations")
    private String otcMapperLocation;

    @Primary // 表示这个数据源是默认数据源, 这个注解必须要加,因为不加的话spring将分不清楚那个为主数据源(默认数据源)
    @Bean("otcDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.otc") //读取application.yml中的配置参数映射成为一个对象
    public DataSource primaryDataSource()
        return DataSourceBuilder.create().build();
    

    @Bean("otcSqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("otcDataSource") DataSource dataSource) throws Exception 
        MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
        MybatisConfiguration mybatisConfiguration=new MybatisConfiguration();
//        mybatisConfiguration.setLogImpl(org.apache.ibatis.logging.stdout.StdOutImpl.class);//日志打印
        sqlSessionFactory.setConfiguration(mybatisConfiguration);
        sqlSessionFactory.setDataSource(dataSource); //数据源
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sqlSessionFactory.setMapperLocations(resolver.getResources(otcMapperLocation));
        sqlSessionFactory.setTypeAliasesPackage("com.batch.otc.otc.entity");
        sqlSessionFactory.setGlobalConfig(globalConfig());
        sqlSessionFactory.setPlugins(new Interceptor[]mybatisPlusInterceptor());
        return sqlSessionFactory.getObject();
    
    @Bean("otcSqlSessionTemplate")
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("otcSqlSessionFactory") SqlSessionFactory sqlSessionFactory) 
        return new SqlSessionTemplate(sqlSessionFactory);
    
    public MybatisPlusInterceptor mybatisPlusInterceptor() 
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    
    public GlobalConfig globalConfig() 
        GlobalConfig globalConfig = new GlobalConfig();
        GlobalConfig.DbConfig dbConfig = new GlobalConfig.DbConfig();
        dbConfig.setLogicDeleteValue("Y");
        dbConfig.setLogicNotDeleteValue("N");
        globalConfig.setDbConfig(dbConfig);
        return globalConfig;
    


以上是关于springboot手动配置多数据源的主要内容,如果未能解决你的问题,请参考以下文章

springboot手动配置多数据源

SpringBoot2.0 配置多数据源

SpringBoot实现多环境配置

SpringBoot2.0之六 多环境配置

springboot手动配置数据源:

springboot 多环境配置