springBoot + orcal + mybatisPlus + multi data source

Projects to use multiple data sources so learning a little, himself read many articles and finally succeeded, where the main part of the recording for later review (pom-dependent files are not posted).
A. Profile application.yml which add a data source
note shrink and into the spaces must be careful

II. Dao two databases mapper layer and the layer to be placed in their respective designated folder which facilitates data source

III. Create Entity each type of data source configured for injecting into the spring

A data source entity classes: 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);
    }

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

Guess you like

Origin www.cnblogs.com/guo-zi/p/12144190.html