springboot+mybtias 连接多数据源

springboot +mybatis连接多数据源

一般我们都是一个项目连接一个数据源,假设要连接多个数据源。

application.yml

  # 数据源
  datasource:
     db1:
        # 驱动名称
        driver-class-name: com.mysql.cj.jdbc.Driver
        # 数据库地址
        jdbc-url: jdbc:mysql:xxxxxxx
        # 用户名
        username: xxxx
        # 密码
        password: 123456
     db2:
        # 驱动名称
        driver-class-name: com.mysql.cj.jdbc.Driver
        # 数据库地址
        jdbc-url: jdbc:mysql:xxxxxxx
        # 用户名
        username: xxxx
        # 密码
        password: 123456
     

java
建立两个配置类 ,一个: MybatisDBConfigA


import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
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.context.annotation.Primary;
import org.springframework.core.env.Environment;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "jee.plues.com.mvc.dao.db1", sqlSessionFactoryRef = "db1SqlSessionFactory")   //basePackages db1的数据库的dao层的地址
public class MybatisDBConfigA {
	
	@Autowired
	private Environment env;
	
	@Primary // 表示这个数据源是默认数据源, 这个注解必须要加,因为不加的话spring将分不清楚那个为主数据源(默认数据源)
    @Bean("db1DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.db1") //读取application.yml中的配置参数映射成为一个对象
    public DataSource getDb1DataSource(){
        return DataSourceBuilder.create().build();
    }

    @Primary
    @Bean("db1SqlSessionFactory")
    public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        // mapper的xml形式文件位置必须要配置,不然将报错:no statement (这种错误也可能是mapper的xml中,namespace与项目的路径不一致导致)  映射地址一定要正确,不然会报invalid bound statement (not found)错误
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/mvc/dao/db1/*/*.xml")); 
        bean.setVfs(SpringBootVFS.class);
        bean.setTypeAliasesPackage(env.getProperty("mybatis.type-aliases-package"));

        return bean.getObject();
    }

    @Primary
    @Bean("db1SqlSessionTemplate")
    public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
        return new SqlSessionTemplate(sqlSessionFactory);
    }
	

}

另外一个:MybatisDBConfigB

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
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.context.annotation.Primary;
import org.springframework.core.env.Environment;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "jee.plues.com.mvc.dao.db2", sqlSessionFactoryRef = "db2SqlSessionFactory")
public class MybatisDBConfigB {
	
	@Autowired
	private Environment env;

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

	    @Bean("db2SqlSessionFactory")
	    public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception {
	        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
	        bean.setDataSource(dataSource);
	        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/mvc/dao/db2/*/*.xml"));
	        bean.setVfs(SpringBootVFS.class);
	        bean.setTypeAliasesPackage(env.getProperty("mybatis.type-aliases-package"));
	        return bean.getObject();
	    }

	    @Bean("db2SqlSessionTemplate")
	    public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
	        return new SqlSessionTemplate(sqlSessionFactory);
	    }
    
}

在springboot启动类上面加上

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值