Dynamic Datasource를 사용하여 SpringBoot에서 여러 데이터 소스를 구성하는 방법
기능적 특징:
다양한 시나리오, 순수 다중 데이터베이스, 읽기-쓰기 분리, 하나의 마스터, 다중 슬레이브, 혼합 모드에 적합한 데이터 소스 그룹화를 지원합니다.
데이터 소스 없이 시작을 지원하고 지연 시작 데이터 소스 구성을 지원합니다(3.3.2+).
데이터베이스에 민감한 구성 정보 암호화 ENC()를 지원합니다.
각 데이터베이스를 지원하여 테이블 구조 스키마와 데이터베이스 데이터베이스를 독립적으로 초기화합니다.
맞춤 주석을 지원하며 DS(3.2.0+)를 상속해야 합니다.
Druid, Mybatis-Plus, P6sy, Jndi에 대한 빠른 통합을 제공합니다.
Druid 및 HikariCp 구성을 단순화하고 전역 매개변수 구성을 제공합니다. 한 번 구성하여 전 세계적으로 사용하세요.
맞춤형 데이터 소스 솔루션을 제공하세요.
프로젝트 시작 후 데이터 소스를 동적으로 추가 및 제거하는 솔루션을 제공합니다.
Mybatis 환경에서 순수한 읽기-쓰기 분리 솔루션을 제공합니다.
SpEL 동적 매개변수를 사용하여 데이터 소스 솔루션을 구문 분석하는 방법을 제공합니다. 내장된 철자, 세션, 헤더, 지원 사용자 정의.
다층 데이터 소스의 중첩된 전환을 지원합니다. (서비스A >>>> 서비스B >>> 서비스C).
shiro, sharding-jdbc, quartz 등과 같은 타사 라이브러리 통합을 위한 솔루션, 예방 조치 및 예제를 제공합니다.
Seata 기반의 분산 거래 솔루션을 제공합니다. 첨부: 네이티브 스프링 트랜잭션은 지원되지 않습니다.
로컬 다중 데이터 소스 트랜잭션 솔루션을 제공합니다. 첨부: 네이티브 스프링 트랜잭션(3.3.1+)은 지원되지 않습니다.
저희 글은 주로 읽기와 쓰기의 분리, 1마스터-다중-슬레이브 환경을 구현합니다.
메인 데이터베이스는 INSERT, UPDATE, DELETE 작업만 수행하는 것이 좋습니다.
데이터베이스에서만 SELECT 작업을 수행하는 것이 좋습니다.
1. 데이터베이스 준비
메인 데이터베이스: PiaoDB
슬레이브 데이터베이스 1: PiaoDB2
슬레이브 데이터베이스 2: PiaoDB3
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(); } }</goodsinfo></goodsinfo>
public interface DemoService { boolean add(GoodsInfo param); List<goodsinfo> selectGoodsInfo(); List<goodsinfo> selectMasterGoodsInfo(); }</goodsinfo></goodsinfo>
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(); } }</goodsinfo></goodsinfo>
@Mapper public interface DemoMapper { boolean insertGoodsInfo(GoodsInfo param); List<goodsinfo> selectGoodsInfo(); }</goodsinfo>5. 새로운 인터페이스 요청(메인 라이브러리에 데이터 추가): 127.0. 0.1:8086/demo/add
2. 마스터 데이터베이스 데이터 인터페이스 쿼리 요청: 127.0.0.1:8086/demo/selectMasterGoodsInfo
3 슬레이브 데이터베이스 데이터 인터페이스 요청(로드 밸런싱):
먼저. 요청 :
두 번째 요청 :
위 내용은 Dynamic Datasource를 사용하여 SpringBoot에서 여러 데이터 소스를 구성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경
