> Java > java지도 시간 > 본문

Dynamic Datasource를 사용하여 SpringBoot에서 여러 데이터 소스를 구성하는 방법

PHPz
풀어 주다: 2023-05-16 19:07:23
앞으로
2650명이 탐색했습니다.

기능적 특징:

  1. 다양한 시나리오, 순수 다중 데이터베이스, 읽기-쓰기 분리, 하나의 마스터, 다중 슬레이브, 혼합 모드에 적합한 데이터 소스 그룹화를 지원합니다.

  2. 데이터 소스 없이 시작을 지원하고 지연 시작 데이터 소스 구성을 지원합니다(3.3.2+).

  3. 데이터베이스에 민감한 구성 정보 암호화 ENC()를 지원합니다.

  4. 각 데이터베이스를 지원하여 테이블 구조 스키마와 데이터베이스 데이터베이스를 독립적으로 초기화합니다.

  5. 맞춤 주석을 지원하며 DS(3.2.0+)를 상속해야 합니다.

  6. Druid, Mybatis-Plus, P6sy, Jndi에 대한 빠른 통합을 제공합니다.

  7. Druid 및 HikariCp 구성을 단순화하고 전역 매개변수 구성을 제공합니다. 한 번 구성하여 전 세계적으로 사용하세요.

  8. 맞춤형 데이터 소스 솔루션을 제공하세요.

  9. 프로젝트 시작 후 데이터 소스를 동적으로 추가 및 제거하는 솔루션을 제공합니다.

  10. Mybatis 환경에서 순수한 읽기-쓰기 분리 솔루션을 제공합니다.

  11. SpEL 동적 매개변수를 사용하여 데이터 소스 솔루션을 구문 분석하는 방법을 제공합니다. 내장된 철자, 세션, 헤더, 지원 사용자 정의.

  12. 다층 데이터 소스의 중첩된 전환을 지원합니다. (서비스A >>>> 서비스B >>> 서비스C).

  13. shiro, sharding-jdbc, quartz 등과 같은 타사 라이브러리 통합을 위한 솔루션, 예방 조치 및 예제를 제공합니다.

  14. Seata 기반의 분산 거래 솔루션을 제공합니다. 첨부: 네이티브 스프링 트랜잭션은 지원되지 않습니다.

  15. 로컬 다중 데이터 소스 트랜잭션 솔루션을 제공합니다. 첨부: 네이티브 스프링 트랜잭션(3.3.1+)은 지원되지 않습니다.

저희 글은 주로 읽기와 쓰기의 분리, 1마스터-다중-슬레이브 환경을 구현합니다.

  • 메인 데이터베이스는 INSERT, UPDATE, DELETE 작업만 수행하는 것이 좋습니다.

  • 데이터베이스에서만 SELECT 작업을 수행하는 것이 좋습니다.

1. 데이터베이스 준비

메인 데이터베이스: PiaoDB

SpringBoot中如何使用Dynamic Datasource配置多数据源

슬레이브 데이터베이스 1: PiaoDB2

SpringBoot中如何使用Dynamic Datasource配置多数据源

슬레이브 데이터베이스 2: PiaoDB3

SpringBoot中如何使用Dynamic Datasource配置多数据源

2. POM 파일 가져오기

동적 데이터 소스-스프링-부트-스타터를 소개합니다.

<!-- 多数据源 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.3.2</version>
</dependency>
로그인 후 복사

3. 구성 파일을 편집합니다

마스터 라이브러리와 두 개의 슬레이브 라이브러리를 구성했습니다.

  • 구성 파일에서 밑줄 _로 구분된 모든 데이터 소스의 "헤더"는 그룹 이름이 동일한 데이터 소스가 하나의 그룹에 배치됩니다.

  • 기본 데이터 소스 이름은 master 이며 spring.datasource.dynamic.primary를 통해 수정할 수 있습니다.

spring:
  datasource:
    dynamic:
      primary: master #设置默认的数据源或者数据源组,默认值即为master
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
      datasource:
        master:
          url: jdbc:mysql://localhost:3306/PiaoDB?serverTimezone=Asia/Shanghai
          username: root
          password: root
          driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
        slave_1:
          url: jdbc:mysql://localhost:3306/PiaoDB2?serverTimezone=Asia/Shanghai
          username: root
          password: root
          driver-class-name: com.mysql.jdbc.Driver
        slave_2:
          url: jdbc:mysql://localhost:3306/PiaoDB3?serverTimezone=Asia/Shanghai
          username: root
          password: root
          driver-class-name: com.mysql.jdbc.Driver
로그인 후 복사

Alibaba 데이터베이스 연결 풀 Druid를 사용하고 있기 때문에 기본 Druid의 빠른 구성 클래스를 제외해야 합니다.

기타 타사 통합 주소: Druid 통합

@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
public class Application {

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
}
로그인 후 복사

일부 springBoot 버전은 제외할 수 없으며 다음과 같은 방법으로 제외할 수 있습니다.

spring:
  autoconfigure:
    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
로그인 후 복사

하나의 마스터와 여러 개의 슬레이브를 구성하는 것 외에도 구성할 수도 있습니다.

# 多主多从                      纯粹多库(记得设置primary)                   混合配置
spring:                               spring:                               spring:
  datasource:                           datasource:                           datasource:
    dynamic:                              dynamic:                              dynamic:
      datasource:                           datasource:                           datasource:
        master_1:                             mysql:                                master:
        master_2:                             oracle:                               slave_1:
        slave_1:                              sqlserver:                            slave_2:
        slave_2:                              postgresql:                           oracle_1:
        slave_3:                              h3:                                   oracle_2:
로그인 후 복사

4. 코드 작성

@DS를 사용하여 데이터 소스를 전환하세요. @DS는 메서드와 클래스에 주석을 달 수 있습니다. 둘 다 존재하는 경우 메소드 주석이 클래스 주석보다 우선합니다. 서비스 구현이나 매퍼 인터페이스 메소드에 주석을 추가하는 것이 좋습니다.

  • @DS("xxx")는 데이터 소스 xxx의 사용을 지정합니다. 여기서 xxx는 그룹 이름이거나 특정 라이브러리의 이름일 수 있습니다. 그룹 이름인 경우 전환 시 로드밸런싱 알고리즘을 사용합니다. 지정한 그룹명이나 라이브러리가 없으면 자동으로 기본 데이터소스(메인 라이브러리)가 사용됩니다

  • @DS가 없으면 기본 데이터소스(메인 라이브러리)가 사용됩니다

  • @DS인 경우 설정되었지만 지정되지 않았습니다. 특정 그룹이나 라이브러리의 경우 DynamicDataSourceStrategy 전략에 따라 슬레이브 라이브러리를 선택합니다. 기본 부하 분산 정책입니다.

1. 쓰기 컨트롤러

@RestController
@RequiredArgsConstructor
@RequestMapping("/demo")
public class DemoController {

    private final DemoService demoService;

    @GetMapping("/add")
    public String add() {
        return demoService.add(null) + "";
    }

    @GetMapping("/selectGoodsInfo")
    public List<GoodsInfo> selectGoodsInfo(){
        return demoService.selectGoodsInfo();
    }

    @GetMapping("/selectMasterGoodsInfo")
    public List<GoodsInfo> selectMasterGoodsInfo(){
        return demoService.selectMasterGoodsInfo();
    }

}
로그인 후 복사
public interface DemoService {

    boolean add(GoodsInfo param);

    List<GoodsInfo> selectGoodsInfo();

    List<GoodsInfo> selectMasterGoodsInfo();

}
로그인 후 복사

3. 쓰기 맵퍼

@Service
@RequiredArgsConstructor
public class DemoServiceImpl implements DemoService {

    private final DemoMapper demoMapper;

    @DS("master")
    @Override
    public boolean add(GoodsInfo param) {
        param = new GoodsInfo();
        param.setGname("1200元秒杀华为Pad");
        param.setGnum(100);

        return demoMapper.insertGoodsInfo(param);
    }

    @DS("slave")
    @Override
    public List<GoodsInfo> selectGoodsInfo() {
        return demoMapper.selectGoodsInfo();
    }

    @DS("master")
    @Override
    public List<GoodsInfo> selectMasterGoodsInfo() {
        return demoMapper.selectGoodsInfo();
    }

}
로그인 후 복사
@Mapper
public interface DemoMapper {

    boolean insertGoodsInfo(GoodsInfo param);

    List<GoodsInfo> selectGoodsInfo();

}
로그인 후 복사

5. 새로운 인터페이스 요청(메인 라이브러리에 데이터 추가): 127.0. 0.1:8086/demo/add

2. 마스터 데이터베이스 데이터 인터페이스 쿼리 요청: 127.0.0.1:8086/demo/selectMasterGoodsInfo

3 슬레이브 데이터베이스 데이터 인터페이스 요청(로드 밸런싱):

먼저. 요청 :SpringBoot中如何使用Dynamic Datasource配置多数据源

두 번째 요청 :

SpringBoot中如何使用Dynamic Datasource配置多数据源

위 내용은 Dynamic Datasource를 사용하여 SpringBoot에서 여러 데이터 소스를 구성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!