mysql多数据源配置

在工作中,我们经常会遇到需要从不同的数据库中获取数据的情况,接下来介绍一种在SpringBoot中连接多个数据库并获取数据的方法。
1.引入MybatisPlus多数据源依赖

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <!-- MyBatis的多数据源 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.3.1</version>
        </dependency>

	   <!--mysql-->
        <!-- 配置多数据源时不要引用-->
        <!--<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.9</version>
        </dependency>

        <!-- MyBatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.2</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-annotation</artifactId>
            <version>3.3.2</version>
        </dependency>

        <!-- MyBatis的分页 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>4.1.4</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
 		

2.application.yml配置

spring:
	# mysql配置内容
	datasource:
		dynamic:
			primary: db1 # 主数据源
			strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 
			datasource: # 数据源说明
				db1:
					# 数据库驱动,这里要换成自己所用的数据库的驱动
					driver-class-name: com.mysql.jdbc.Driver #com.mysql.cj.jdbc.Driver
					# 数据库地址和数据库名,这里也是要换成自己的
					url: jdbc:mysql://localhost:3306/data?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true
					username: root #数据库连接用户名
					password: 123456 #数据库连接密码
				db2:
					# 数据源2的数据库驱动,可以和db1不同
					driver-class-name: com.mysql.jdbc.Driver
					# 数据库2的地址
					url: jdbc:mysql://localhost:3306/data?autoReconnect=true&useSSL=false&allowMultiQueries=true&useUnicode=true
					username: root #数据库连接用户名
					password: 123456 #数据库连接密码```

3.在数据访问层(mapper)或者逻辑层(serviceImpl)上添加@DS注解
@DS 可以放在在方法上和类上,同时存在时方法优先于类,并建议注解放在在mapper接口类上。

在使用@DS注解时,有如下注意事项:

  • 不能使用事务,否则数据源不会切换,默认是第一次加载的数据源
  • 第一次加载数据源之后,后面操作其它数据源时,如果数据源不存在,使用的还是第一次加载的数据源
  • 数据源名称不要包含下划线,否则不能切换
@Mapper
@DS("db1")
public interface CityMapper extends BaseMapper<NewsArea> {
}

4.启动类中main方法使用exclude禁用默认加载的application单数据源配置

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
public class Application {
 
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
 
}
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐