springBoot+orcal+mybatisPlus+多数据源

项目要用到多数据源所以学习了一下,自己看了很多文章最后终于成功,这里记录主要部分以便以后查阅(pom依赖文件不贴了).
一.配置文件application.yml里面添加数据源
注意缩进和空格一定要仔细

二.两个数据库的dao层和mapper层要放在自己的文件夹里面便于指定各自的数据源

三.创建各自数据源配置的实体类用来注入到spring

数据源一的实体类:DefaultDataSourceConfig.java

package com.cic.common.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
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.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;
import java.sql.SQLException;

/**

  • @author GW
    */
    @Configuration
    @MapperScan(value = {"com.cic.common.mapper.foundationmapper."}, sqlSessionFactoryRef = "sqlSessionFactory1")
    public class DefaultDataSourceConfig {

    @Value("${spring.datasource.foundation.driver-class-name}")
    private String driverClass;
    @Value("${spring.datasource.foundation.url}")
    private String url;
    @Value("${spring.datasource.foundation.username}")
    private String username;
    @Value("${spring.datasource.foundation.password}")
    private String password;
    @Value("${spring.datasource.tomcat.initial-size}")
    private int initialSize;
    @Value("${spring.datasource.tomcat.min-idle}")
    private int minIdle;
    @Value("${spring.datasource.tomcat.max-active}")
    private int maxActive;
    @Value("${spring.datasource.tomcat.max-wait}")
    private int maxWait;

    @Bean(name = "dataSource")
    @Primary
    public DataSource dataSource() throws SQLException {
    DruidDataSource druidDataSource = new DruidDataSource();
    druidDataSource.setUsername(username);
    druidDataSource.setPassword(password);
    druidDataSource.setUrl(url);
    druidDataSource.setFilters("stat,wall");
    druidDataSource.setInitialSize(initialSize);
    druidDataSource.setMinIdle(minIdle);
    druidDataSource.setMaxActive(maxActive);
    druidDataSource.setMaxWait(maxWait);
    druidDataSource.setUseGlobalDataSourceStat(true);
    druidDataSource.setDriverClassName(driverClass);
    return druidDataSource;
    }

    @Bean
    @Primary
    public SqlSessionFactory sqlSessionFactory1(@Qualifier("dataSource") DataSource dataSource) throws Exception {
    MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
    bean.setDataSource(dataSource);
    bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/mapper/foundation/.xml"));
    return bean.getObject();
    }

    @Bean
    @Primary
    public DataSourceTransactionManager dataSourceTransactionManager1(@Qualifier("dataSource") DataSource dataSource){
    return new DataSourceTransactionManager(dataSource);
    }

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

数据源二实体类:UserResourceDataSourceConfig.java

package com.cic.common.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import lombok.Data;
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.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 org.springframework.stereotype.Component;

import javax.sql.DataSource;
import java.sql.SQLException;

/**

  • @author GW
    */
    @Data
    @Configuration
    @MapperScan(basePackages = {"com.cic.common.mapper.usermapper."}, sqlSessionFactoryRef = "sqlSessionFactory2")
    public class UserResourceDataSourceConfig {

    @Value("${spring.datasource.user.driver-class-name}")
    private String driverClass;
    @Value("${spring.datasource.user.url}")
    private String url;
    @Value("${spring.datasource.user.username}")
    private String username;
    @Value("${spring.datasource.user.password}")
    private String password;
    @Value("${spring.datasource.tomcat.initial-size}")
    private int initialSize;
    @Value("${spring.datasource.tomcat.min-idle}")
    private int minIdle;
    @Value("${spring.datasource.tomcat.max-active}")
    private int maxActive;
    @Value("${spring.datasource.tomcat.max-wait}")
    private int maxWait;

    @Bean(name = "userDataSource")
    public DataSource userDataSource() throws SQLException {
    DruidDataSource druidDataSource = new DruidDataSource();
    druidDataSource.setUsername(username);
    druidDataSource.setPassword(password);
    druidDataSource.setUrl(url);
    druidDataSource.setFilters("stat,wall");
    druidDataSource.setInitialSize(initialSize);
    druidDataSource.setMinIdle(minIdle);
    druidDataSource.setMaxActive(maxActive);
    druidDataSource.setMaxWait(maxWait);
    druidDataSource.setUseGlobalDataSourceStat(true);
    druidDataSource.setDriverClassName(driverClass);
    return druidDataSource;
    }

    @Bean
    public SqlSessionFactory sqlSessionFactory2(@Qualifier("userDataSource") DataSource userDataSource) throws Exception {
    MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
    bean.setDataSource(userDataSource);
    bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/mapper/usermapper/.xml"));
    return bean.getObject();
    }

    @Bean
    public DataSourceTransactionManager dataSourceTransactionManager2(@Qualifier("userDataSource") DataSource userDataSource){
    return new DataSourceTransactionManager(userDataSource);
    }

    @Bean
    public SqlSessionTemplate sqlSessionTemplate2(@Qualifier("sqlSessionFactory2") SqlSessionFactory sqlSessionFactory){
    return new SqlSessionTemplate(sqlSessionFactory);
    }

}
对数据源实体类注解的一点解释说明

猜你喜欢

转载自www.cnblogs.com/guo-zi/p/12144190.html