SpringBoot+MybatisPlus+dynamic-datasources实现连接Postgresql和mysql多数据源

场景

dynamic-datasource-spring-boot-starter实现动态数据源Mysql和Sqlserver:

dynamic-datasource-spring-boot-starter实现动态数据源Mysql和Sqlserver_dynamic-datasource-spring-boot-starter mysql sqlse-CSDN博客

SpringBoot中整合MybatisPlus快速实现Mysql增删改查和条件构造器:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/135646024

在上面的基础上实现同时连接mysql和postgresql多数据源。

注:

博客:
霸道流氓气质-CSDN博客

实现

1、添加依赖

添加postgresql的依赖

        
            org.postgresql
            postgresql
        

添加mysql驱动

        
            mysql
            mysql-connector-java
        

添加多数据源dynamic-datasource的依赖

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

添加mybatisplus的依赖

        
            com.baomidou
            mybatis-plus-boot-starter
            3.5.1
        

完整pom依赖

        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.projectlombok
            lombok
            true
        
        
        
            mysql
            mysql-connector-java
        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.5.1
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            org.postgresql
            postgresql
        
        
            com.baomidou
            dynamic-datasource-spring-boot-starter
            3.2.1
        

2、修改application.yml配置文件,添加多数据源的配置

spring:
  datasource:
    dynamic:
      primary: master #设置默认的数据源或者数据源组,默认值即为master
      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      datasource:
        master:
         url:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver
          dbcp2:
            min-idle: 5                                # 数据库连接池的最小维持连接数
            initial-size: 5                            # 初始化连接数
            max-total: 5                               # 最大连接数
            max-wait-millis: 150                       # 等待连接获取的最大超时时间

        pg:
          url: jdbc:postgresql://127.0.0.1:5432/test
          username: postgres
          password: 123456
          driver-class-name: org.postgresql.Driver
          dbcp2:
            min-idle: 5                                # 数据库连接池的最小维持连接数
            initial-size: 5                            # 初始化连接数
            max-total: 5                               # 最大连接数
            max-wait-millis: 150                       # 等待连接获取的最大超时时间

3、postgresql中新建表t_student

并新建实体类

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "t_student")
public class Student implements Serializable {

    private static final long serialVersionUID = -5514139686858156155L;

    private Integer id;

    private String name;

    private Integer age;

    private String address;

}

4、新建student的mapper

import com.badao.demo.config.DataSourceOfPG;
import com.badao.demo.entity.Student;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;

@Repository
@DataSourceOfPG
public interface StudentMapper extends BaseMapper {

}

注意这里的@DataSourceOfPG是自定义注解,你也可以直接使用

@DS("pg")

这里的pg与上面yml中数据源名称对应,为防止pg修改导致多处修改,这里的dynamic datasource的 @DS注解使用

自定义注解实现。

import com.baomidou.dynamic.datasource.annotation.DS;
import java.lang.annotation.*;

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@DS("pg")
public @interface DataSourceOfPG {
   
}

关于自定义注解可以参考其他文章

Java中通过反射+自定义注解判断对象中部分属性是否为空,返回为空字段的名称或自定义含义:

Java中通过反射+自定义注解判断对象中部分属性是否为空,返回为空字段的名称或自定义含义_java判断空值注解-CSDN博客

SpringBoot中通过自定义Jackson注解实现接口返回数据脱敏:

SpringBoot中通过自定义Jackson注解实现接口返回数据脱敏_springboot 自定义 jacksonfilter-CSDN博客

user表参考上面博客

实体类

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "t_user")
public class User implements Serializable {

    private static final long serialVersionUID = -5514139686858156155L;

    private Integer id;

    private Integer userId;

    private String name;

    private Integer age;

    @TableField(exist = false)
    private String address;

}

mapper为

@Repository
public interface UserMapper extends BaseMapper {

}

5、编写单元测试测试从两个数据源中获取数据

@SpringBootTest
class PGTest {

    @Autowired
    private StudentMapper studentMapper;

    @Autowired
    private UserMapper userMapper;

    @Test
    void test1() {
        List students = studentMapper.selectList(new LambdaQueryWrapper<>());
        System.out.println(students);
        List users = userMapper.selectList(new LambdaQueryWrapper<>());
        System.out.println(users);
    }

}

单元测试运行结果

你可能感兴趣的:(SpringBoot,spring,boot,postgresql,mysql)