idel如何实现连接多个数据库的用法

就是现在我的项目中只连接了一个数据就是本地数据库,如何实现连接两个数据库,主数据库为本地数据库,副数据库为192.168.1.123上面的数据库,就是当我登录的时候访问的是我的主数据库,在我查询的时候数据有可能从我的副数据库中得到

img

设置主从库

img


**创建DataSourceConfig **

@Configuration
public class DataSourceConfig {

    @Bean(name = "dbOneDataSource")
    @Primary
    // application.yml 中对应db对应公司自有空气网格系统数据库
    @ConfigurationProperties(prefix = "spring.db1")
    public DataSource dbOneDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "dbTwoDataSource")
    // application.yml 中对应数据库1
    @ConfigurationProperties(prefix = "spring.db2")
    public DataSource dbTwoDataSource() {
        return DataSourceBuilder.create().build();
    }

    //@Bean(name = "dbThreeDataSource")
    // application.yml 中对应 数据库2
    //@ConfigurationProperties(prefix = "spring.db3")
    /*public DataSource dbThreeDataSource() {
        return DataSourceBuilder.create().build();
    }*/
}

编写MybatisConfig


```java
 /**
     * 第一个数据库 SqlSessionFactory && SqlSessionTemplate 创建
     */
    @Configuration
    //绑定数据源对应的mapper[第一个使用]
    @MapperScan(basePackages = {"com.hqkj.httpdemo.demo.one.mapper"},
            sqlSessionFactoryRef = "sqlSessionFactoryOne",
            sqlSessionTemplateRef = "sqlSessionTemplateOne")
    public static  class DBOne{
        @Resource
        DataSource dbOneDataSource;
        @Bean
        @Primary
        public SqlSessionFactory sqlSessionFactoryOne() throws Exception {
            SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
            factoryBean.setDataSource(dbOneDataSource);
            return factoryBean.getObject();
        }
        @Bean
        @Primary
        public SqlSessionTemplate sqlSessionTemplateOne() throws Exception {
            SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactoryOne());
            return template;
        }
    }

```java
/**
     * 第二个数据库 SqlSessionFactory && SqlSessionTemplate 创建
     */
    @Configuration
    //数据原绑定对应的maper[第二个使用]
    @MapperScan(basePackages = {"com.hqkj.httpdemo.demo.two.mapper"},
            sqlSessionFactoryRef = "sqlSessionFactoryTwo",
            sqlSessionTemplateRef ="sqlSessionTemplateTwo" )
    public static class DBTwo{
        @Resource
        DataSource dbTwoDataSource;
        @Bean
        public SqlSessionFactory sqlSessionFactoryTwo() throws Exception {
            SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
            factoryBean.setDataSource(dbTwoDataSource);
            return factoryBean.getObject();
        }
        @Bean
        public SqlSessionTemplate sqlSessionTemplateTwo() throws Exception {
            SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactoryTwo());
            return template;
        }
    }

搜下关键词 spring-boot 多数据源 吧,这块内容比较多

想自己造轮子可以看下我之前的博文 https://blog.csdn.net/white_bird_shit/article/details/109496861
不想造有写好的轮子 开箱即用 https://gitee.com/baomidou/dynamic-datasource-spring-boot-starter



```yaml
spring:
  datasource:
    dynamic:
      datasource:
        master:
           type: com.alibaba.druid.pool.DruidDataSource
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
          username: root
          password: root


        slave:
          type: com.alibaba.druid.pool.DruidDataSource
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://192.168.1.123:3306/test?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
          username: root
          password: root
      primary: master


```xml
<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.4.1</version>
        </dependency>

@DS("master")
@Mapper
public interface ProfitsMapper extends BaseMapper<ProfitsEntity> {

@DS 里面写master 或者salve就会调用不同服务器的数据库