springboot+mybatis配置多数据源

1、首先你自己实现了单数据源。

2、然后在application.properties中配置第二数据源

#第一数据源
spring.datasource.db_medical.url=jdbc:mysql://192.168.1.70:3306/db_medical
spring.datasource.db_medical.username=root
spring.datasource.db_medical.password=123456
spring.datasource.db_medical.driver-class-name=com.mysql.jdbc.Driver

#第二数据源
spring.datasource.kdys.url=jdbc:mysql://192.168.1.70:3306/kdys
spring.datasource.kdys.username=root
spring.datasource.kdys.password=123456
spring.datasource.kdys.driver-class-name=com.mysql.jdbc.Driver

3、新建datasource包,创建DataSource1Config(主数据源)

package com.gdysh.account.common.datasource;


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.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
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;

/**
 * Created by summer on 2016/11/25.
 */
@Configuration
//mapper文件路径
@MapperScan(basePackages = "com.gdysh.account.mapper.db_medical", sqlSessionTemplateRef  = "db_medicalSqlSessionTemplate")
public class DataSource1Config {

    @Bean(name = "db_medicalDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.db_medical")
    @Primary //这个注解是说明此是默认数据源,必须设定默认数据源。(即主数据源)
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "db_medicalSqlSessionFactory")
    @Primary
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("db_medicalDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //xml路径
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/yilife/mapper/db_medical/*.xml"));
        return bean.getObject();
    }

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

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

}

4、然后在同个包创建第二数据源DataSource2Config

package com.gdysh.account.common.datasource;



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.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
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.gdysh.account.mapper.kdys", sqlSessionTemplateRef  = "kdysSqlSessionTemplate")
public class DataSource2Config {

    @Bean(name = "kdysDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.kdys")

    public DataSource kdysDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "kdysSqlSessionFactory")

    public SqlSessionFactory kdysSqlSessionFactory(@Qualifier("kdysDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/gdysh/account/mapper/kdys/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "kdysTransactionManager")

    public DataSourceTransactionManager kdysTransactionManager(@Qualifier("kdysDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "kdysSqlSessionTemplate")

    public SqlSessionTemplate kdysSqlSessionTemplate(@Qualifier("kdysSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

5、然后你把这2个类相关的路径和名称改成自己的即可。其实第二数据源相关的东西(实体类等等)仿照着第一数据源的写就可以了。这里需要注意的是,2个数据源对应的dao层不能在同个包中,否则出错,以及非主数据源不能有@Primary 注解

猜你喜欢

转载自blog.csdn.net/h295928126/article/details/53747204