Springboot多数据源配置

本文详细介绍了如何在SpringBoot项目中配置多个数据源,包括数据源的定制化配置,以及如何通过不同的Mapper访问不同的数据源,实现多数据源查询。案例中展示了两个数据源的配置,分别为`dataSource1`和`dataSource2`,并提供了相应的SqlSessionFactory和SqlSessionTemplate的创建。
摘要由CSDN通过智能技术生成

spring boot本来最初设计是为独体服务,可是现实中的业务需求使用中却不够用,需要进行多连接数据源使用,以下为开发过程使用的案例

1、数据源自定义配置

spring:
  datasource1:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/1009-test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=UTC
    username: root
    password: root
  datasource2:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://124.221.234.168:3306/bills?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=UTC
    username: root
    password: root

2、数据源配置自定义

2、1数据源自定义配置1

package com.wxz.config;

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.DataSourceProperties;
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.transaction.PlatformTransactionManager;

import javax.annotation.Resource;
import javax.sql.DataSource;

/**
 * TODO
 *
 * @author wxz
 * @date 2022/5/17 22:52
 */
@Configuration
@MapperScan(basePackages = "com.wxz.masterMapper",sqlSessionFactoryRef = "sqlSessionFactory1")
public class DataSourceConfig1 {
    @Bean
    @ConfigurationProperties("spring.datasource1")
    @Primary //springboot自定义所有的多中间件多数据源操作,必须指明一个主要的
    public DataSourceProperties dataSourceProperties(){
        return new DataSourceProperties();
    }

    @Bean("dataSource1")
    @Primary
    public DataSource dataSource(){
        DataSourceProperties dataSourceProperties = dataSourceProperties();
        return dataSourceProperties.initializeDataSourceBuilder().build();
    }

    @Bean("txTransManager1")
    @Resource
    @Primary
    public PlatformTransactionManager txTransManager(@Qualifier("dataSource1")DataSource dataSource){
        return new DataSourceTransactionManager(dataSource);
    }



    @Bean("sqlSessionFactory1")
    @Primary
    @Resource
    public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource1")DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(dataSource);
        //加载xml配置文件
        sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().
                getResources("classpath*:mapper/*.xml"));
        return sqlSessionFactory.getObject();
    }

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

2、2数据源自定义配置2

package com.wxz.config;

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.DataSourceProperties;
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 org.springframework.transaction.PlatformTransactionManager;

import javax.annotation.Resource;
import javax.sql.DataSource;

/**
 * TODO
 *
 * @author wxz
 * @date 2022/5/17 23:01
 */
@Configuration
@MapperScan(basePackages = "com.wxz.slaveMapper",sqlSessionFactoryRef = "sqlSessionFactory2")
public class DataSourceConfig2 {
    @Bean
    @ConfigurationProperties("spring.datasource2")
    public DataSourceProperties dataSourceProperties2(){
        return new DataSourceProperties();
    }


    @Bean("dataSource2")
    public DataSource dataSource2(){
        DataSourceProperties dataSourceProperties = dataSourceProperties2();
        return dataSourceProperties.initializeDataSourceBuilder().build();
    }

    @Bean("sqlSessionFactory2")
    public SqlSessionFactory sqlSessionFactory2(@Qualifier("dataSource2")DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(dataSource);
        sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().
                getResources("classpath*:mapper/*.xml"));
        return sqlSessionFactory.getObject();
    }

    @Bean("txTransManager2")
    @Resource
    public PlatformTransactionManager txTransManager2(@Qualifier("dataSource2")DataSource dataSource){
        return new DataSourceTransactionManager(dataSource);
    }

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

3、接口测试访问

 

 项目目录

启动类

 这样就可以通过不同的mapper来调用不同的数据源,实现多数据源的查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值