龙空技术网

Spring Boot 2.X基于Starter实现多数据源

自学编程之道 1983

前言:

当前朋友们对“html怎么连接数据库”大约比较注意,朋友们都需要知道一些“html怎么连接数据库”的相关文章。那么小编也在网络上网罗了一些有关“html怎么连接数据库””的相关文章,希望看官们能喜欢,我们一起来了解一下吧!

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

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

添加依赖包

<dependency>            <groupId>com.baomidou</groupId>            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>            <version>3.0.0</version></dependency>
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新建实体类

我这里用到了两个实体类UserFeedback,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<User>{}

FeedbackMapper:

public interface FeedbackMapper extends BaseMapper<Feedback> {}
在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注解来标识要使用的数据源,该注解可以使用在ClassMETHOD上,如果是使用在类上,则表示该类都使用这个指定的数据库连接。

@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

现在来访问,可以看到两个数据源

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

标签: #html怎么连接数据库