0
点赞
收藏
分享

微信扫一扫

springboot集成多数据

陈情雅雅 2022-04-18 阅读 61
数据库

一:添加依赖

 注意这里我是用的Mybatis-plus,如果不是在下面的Configuration里会有些许不同;

            <!-- 数据库依赖 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid.version}</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql-connector.version}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis-plus.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-beans</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

二:添加配置文件

 三:写Configuation

package com.cmskscy.bizpay.config;

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
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.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;

@Configuration
@MapperScan(basePackages = "com.cmskscy.bizpay.mapper.merchant", sqlSessionTemplateRef = "merchantFactory")
public class MerchantDatasourceConfig {

    /**
     * 创建数据源
     */
    @Primary
    @Bean(name = "merchantDatasource")
    @ConfigurationProperties("spring.datasource.merchant")
    public DataSource merchantDatasource() {
        return DruidDataSourceBuilder.create().build();
    }

    /**
     * 创建SessionFactory
     */
    @Primary
    @Bean(name = "merchantDataSourceFactory")
    public SqlSessionFactory sqlSessionFactoryBean(@Qualifier("merchantDatasource") DataSource dataSource) throws Exception {
        // 用的Mybatis-plus这里是使用MybatisSqlSessionFactoryBean,而Mybatis直接使用SqlSessionFactoryBean即可
        MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/merchant/*.xml"));
        return sessionFactoryBean.getObject();
    }

    /**
     * 创建SqlSessionTemplate
     */
    @Bean(name = "merchantFactory")
    public SqlSessionTemplate merchantSqlSessionTemplate(@Qualifier("merchantDataSourceFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

    /**
     * 创建事务管理器
     */
    @Bean("merchantTransactionManger")
    public DataSourceTransactionManager merchantTransactionManger(@Qualifier("merchantDatasource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}
package com.cmskscy.bizpay.config;

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
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.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.cmskscy.bizpay.mapper.order", sqlSessionTemplateRef = "orderFactory")
public class OrderDatasourceConfig {

    @Bean(name = "orderDatasource")
    @ConfigurationProperties("spring.datasource.order")
    public DataSource orderDatasource() {
        return DruidDataSourceBuilder.create().build();
    }

    @Bean(name = "orderDataSourceFactory")
    public SqlSessionFactory sqlSessionFactoryBean(@Qualifier("orderDatasource") DataSource dataSource) throws Exception {
        // 用的Mybatis-plus这里是使用MybatisSqlSessionFactoryBean,而Mybatis直接使用SqlSessionFactoryBean即可
        MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/order/*.xml"));
        return sessionFactoryBean.getObject();
    }

    /**
     * 创建SqlSessionTemplate
     */
    @Bean(name = "orderFactory")
    public SqlSessionTemplate orderSqlSessionTemplate(@Qualifier("orderDataSourceFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

    /**
     * 创建事务管理器
     */
    @Bean("orderTransactionManger")
    public DataSourceTransactionManager orderTransactionManger(@Qualifier("orderDatasource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}
package com.cmskscy.bizpay.config;

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
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.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.cmskscy.bizpay.mapper.reconciliation", sqlSessionTemplateRef = "reconciliationFactory")
public class ReconciliationDatasourceConfig {

    @Bean(name = "reconciliationDatasource")
    @ConfigurationProperties("spring.datasource.reconciliation")
    public DataSource reconciliationDatasource() {
        return DruidDataSourceBuilder.create().build();
    }

    @Bean(name = "reconciliationDataSourceFactory")
    public SqlSessionFactory sqlSessionFactoryBean(@Qualifier("reconciliationDatasource") DataSource dataSource) throws Exception {
        // 用的Mybatis-plus这里是使用MybatisSqlSessionFactoryBean,而Mybatis直接使用SqlSessionFactoryBean即可
        MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/reconciliation/*.xml"));
        return sessionFactoryBean.getObject();
    }

    /**
     * 创建SqlSessionTemplate
     */
    @Bean(name = "reconciliationFactory")
    public SqlSessionTemplate reconciliationSqlSessionTemplate(@Qualifier("reconciliationDataSourceFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

    /**
     * 创建事务管理器
     */
    @Bean("reconciliationTransactionManger")
    public DataSourceTransactionManager reconciliationTransactionManger(@Qualifier("reconciliationDatasource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}

四:启动项目

正常写入业务代码就可以启动项目了,根据@MapperScan()的包路径会使用对应的数据源去数据库查询;

PS:在上面Configuration中的@MapperScan()对应包下一定要有文件才能启动项目,否则会报错;

举报

相关推荐

0 条评论