druid 手动指定数据源_Spring Boot 2.X基于Starter实现多数据源

一般一个项目就只会用到一个数据库,但是有时候遇到比较复杂的一点的项目就会涉及到多个数据库,比如在业务量较大的时候会涉及到分库分表,如果不增加数据库代理层的话,就只有在项目中来处理。还有像我们现在在一个项目中会涉及到GBase、MySQL、DB2这三种数据库,这种情况就涉及到多种数据库连接。那么我们Spring Boot中如何实现多数据库连接呢?

至于单数据库连接,可以参考我之前记录的日记Spring Boot整合Mybatis Plus和Druid,这里我们就来直接开始多数据库连接的实战。

添加依赖包

com.baomidou            dynamic-datasource-spring-boot-starter            3.0.0

Spring Boot多数据源连接PostgreSQL和MySQL配置

spring:  datasource:    druid:      stat-view-servlet:        enabled: true        login-username: admin        login-password: admin    dynamic:      primary: mariadb      datasource:        mariadb:          username: root          password: root          url: jdbc:mysql://127.0.0.1:3306/nacos_config?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true          driver-class-name: org.mariadb.jdbc.Driver          druid:            initial-size: 50            max-active: 200            min-idle: 50            max-wait: 50        pgsql:          username: postgres          password: postgres          url: jdbc:postgresql://xxx.xx.xx.xxx:5432/databasename          driver-class-name: org.postgresql.Driver          druid:            initial-size: 50            max-active: 200            min-idle: 50            max-wait: 50

使用dynamic-datasource

新建实体类

我这里用到了两个实体类User和Feedback,User类就不做展示,上一篇有,这里就直接看看我们的Feddback,

@Data@TableName("wechat_feedback")public class Feedback {    private int id;    private String title;    private String content;    @TableField("open_id")    private String openId;}

新建Mapper接口类

UserMapper:

public interface UserMapper extends BaseMapper{}

FeedbackMapper:

public interface FeedbackMapper extends BaseMapper {}

在controller中调用Mapper

这里我们还是用之前编写的UserController类:

@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface DS {  /**   * groupName or specific database name or spring SPEL name.   *   * @return the database you want to switch   */  String value();}

这里需要使用@DS注解来标识要使用的数据源,该注解可以使用在Class和METHOD上,如果是使用在类上,则表示该类都使用这个指定的数据库连接。

@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface DS {  /**   * groupName or specific database name or spring SPEL name.   *   * @return the database you want to switch   */  String value();}

由于我这里使用到了Druid,那么还需要在启动类上加上@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class),排除掉druid-spring-boot-starter中的DruidDataSourceAutoConfigure自动配置类。

现在我们启动起来看看效果,可以在启动日志中看到

2020-02-03 12:54:42.740  INFO com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:1010) 2CNU7X5OLAUE004 --- [           main] c.a.d.p.DruidDataSource                  : {dataSource-1,mariadb} inited2020-02-03 12:54:46.592  INFO com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:1010) 2CNU7X5OLAUE004 --- [           main] c.a.d.p.DruidDataSource                  : {dataSource-2,pgsql} inited2020-02-03 12:54:46.594  INFO com.baomidou.dynamic.datasource.DynamicRoutingDataSource.addDataSource(DynamicRoutingDataSource.java:148) 2CNU7X5OLAUE004 --- [           main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource - load a datasource named [mariadb] success2020-02-03 12:54:46.594  INFO com.baomidou.dynamic.datasource.DynamicRoutingDataSource.addDataSource(DynamicRoutingDataSource.java:148) 2CNU7X5OLAUE004 --- [           main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource - load a datasource named [pgsql] success

现在来访问http://localhost:8080/druid/datasource.html,可以看到两个数据源

f8d29c181d6a45c195c36dfdbe967509
33add72f5c364fe88a8ebaa253b41977
060b1b5e81664d9db23c801ed3795ec8

这篇博文是今年初记录,但是里面的东西不过时,若有不足之处还望指正,多谢。欢迎感兴趣的朋友与我多多交流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值