SpringBoot 2 는 JTA 구성 요 소 를 통합 하여 다 중 데이터 소스 사무 관 리 를 실현 합 니 다.
6840 단어 SpringBoot2JTA다 중 데이터 원본사무 관리
1.JTA 기본 개념
JTA 는 자바-transaction-API 이 고 JTA 는 응용 프로그램 이 분포 식 사무 처 리 를 수행 할 수 있 도록 합 니 다.즉,두 개 이상 의 네트워크 컴퓨터 자원 에 접근 하고 데 이 터 를 업데이트 할 수 있 습 니 다.JDBC 드라이버 가 JTA 에 대한 지원 은 데이터 접근 능력 을 크게 향상 시 켰 다.
XA 프로 토 콜 은 데이터베이스 차원 의 분포 식 사무 관리의 규범 이다.JTA 는 XA 프로 토 콜 이 자바 에서 실현 되 고 여러 개의 데이터베이스 나 메시지 업 체 가 JTA 인 터 페 이 스 를 실현 하 며 개발 자 는 SpringJTA 인 터 페 이 스 를 호출 하면 JTA 사무 관리 기능 을 실현 할 수 있다.
JTA 사 무 는 JDBC 사무 보다 더 강하 다.하나의 JTA 사 무 는 여러 명의 참여 자가 있 을 수 있 으 며,하나의 JDBC 사 무 는 하나의 데이터베이스 연결 로 제한 된다.다음 자바 플랫폼 의 모든 구성 요 소 는 JTA 업무 에 참여 할 수 있 습 니 다.
2.분포 식 사무
분산 트 랜 잭 션(Distributed Transaction)은 트 랜 잭 션 관리자(TransactionManager)와 하나 이상 의 XA 프로 토 콜 을 지원 하 는 자원 관리자(Resource Manager)를 포함한다.
자원 관리 자 는 개발 에 자주 사용 되 는 관계 형 데이터 베이스:MySQL,Oracle 등,메시지 미들웨어 RocketMQ,RabbitMQ 등 임의의 유형의 지구 화 데이터 저장 용기 입 니 다.
사무 관리 자 는 사무 성명,사무 자원 관리,동기 화,사무 상하 문 전파 등 기능 을 제공 하고 모든 사무 참여 단원 의 상호 통신 에 대한 책임 을 진다.JTA 규범 은 사무 관리자 와 다른 사무 참여 자가 상호작용 하 는 인 터 페 이 스 를 정의 하고 다른 사무 참여 자 와 사무 관리 자 는 상호작용 을 한다.
2.SpringBoot 통합 JTA
프로젝트 전체 구성 도
1.핵심 의존
<!--SpringBoot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--JTA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jta-atomikos</artifactId>
</dependency>
2.환경 설정jtaManager 의 설정 은 로그 출력 에서 매우 중요 합 니 다.
spring:
jta:
transaction-manager-id: jtaManager
#
datasource:
type: com.alibaba.druid.pool.DruidDataSource
data01:
driverClassName: com.mysql.jdbc.Driver
dbUrl: jdbc:mysql://localhost:3306/data-one
username: root
password: 000000
data02:
driverClassName: com.mysql.jdbc.Driver
dbUrl: jdbc:mysql://localhost:3306/data-two
username: root
password: 000000
3.핵심 용기여기 서 두 데이터 베 이 스 를 연결 하 는 설정 기법 은 모두 같 아서 소스 코드 에서 스스로 다운로드 하여 읽 을 수 있다.기본 적 인 사 고 는 데이터 원본 을 JTA 구성 요소 에 맡 겨 통일 적 으로 관리 하고 업무 의 통신 을 편리 하 게 하 는 것 이다.
데이터 원본 매개 변수
@Component
@ConfigurationProperties(prefix = "spring.datasource.data01")
public class DruidOneParam {
private String dbUrl;
private String username;
private String password;
private String driverClassName;
}
JTA 구성 요소 설정
package com.jta.source.conifg;
@Configuration
@MapperScan(basePackages = {"com.jta.source.mapper.one"},sqlSessionTemplateRef = "data01SqlSessionTemplate")
public class DruidOneConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(DruidOneConfig.class) ;
@Resource
private DruidOneParam druidOneParam ;
@Primary
@Bean("dataSourceOne")
public DataSource dataSourceOne () {
//
MysqlXADataSource mysqlXADataSource = new MysqlXADataSource();
mysqlXADataSource.setUrl(druidOneParam.getDbUrl());
mysqlXADataSource.setUser(druidOneParam.getUsername());
mysqlXADataSource.setPassword(druidOneParam.getPassword());
mysqlXADataSource.setPinGlobalTxToPhysicalConnection(true);
//
AtomikosDataSourceBean atomikosDataSourceBean = new AtomikosDataSourceBean();
atomikosDataSourceBean.setXaDataSource(mysqlXADataSource);
atomikosDataSourceBean.setUniqueResourceName("dataSourceOne");
return atomikosDataSourceBean;
}
@Primary
@Bean(name = "sqlSessionFactoryOne")
public SqlSessionFactory sqlSessionFactoryOne(
@Qualifier("dataSourceOne") DataSource dataSourceOne) throws Exception{
// Session
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSourceOne);
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sessionFactory.setMapperLocations(resolver.getResources("classpath*:/dataOneMapper/*.xml"));
return sessionFactory.getObject();
}
@Primary
@Bean(name = "data01SqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(
@Qualifier("sqlSessionFactoryOne") SqlSessionFactory sqlSessionFactory) {
// Session
return new SqlSessionTemplate(sqlSessionFactory);
}
}
4.테스트 대비여기 서 두 가지 방법 으로 테스트 결 과 를 비교 하여 두 데이터 소스 간 에 데이터 조작 을 할 때 인터페이스 방법 에@Transactional 주 해 를 추가 하면 데이터 가 두 데이터 소스 간 에 도 일치 성 을 확보 할 수 있 습 니 다.
@Service
public class TransferServiceImpl implements TransferService {
@Resource
private UserAccount01Mapper userAccount01Mapper ;
@Resource
private UserAccount02Mapper userAccount02Mapper ;
@Override
public void transfer01() {
userAccount01Mapper.transfer("jack",100);
System.out.println("i="+1/0);
userAccount02Mapper.transfer("tom",100);
}
@Transactional
@Override
public void transfer02() {
userAccount01Mapper.transfer("jack",200);
System.out.println("i="+1/0);
userAccount02Mapper.transfer("tom",200);
}
}
3.JTA 구성 요소 소결위 에서 JTA 는 다 중 데이터 소스 의 사무 관 리 를 실현 하고 사용 방식 이 상대 적 으로 간단 하 며 두 단계 의 제출 을 통 해 여러 데이터 소스 의 사 무 를 동시에 관리 할 수 있 습 니 다.그러나 드 러 난 문제 도 매우 뚜렷 하 다.바로 비교적 심각 한 성능 문제 이다.여러 개의 데이터 소스 를 동시에 조작 하기 때문에 그 중의 한 데이터 소스 가 데 이 터 를 얻 는 시간 이 너무 길 면 전체 요청 이 매우 길 고 업무 시간 이 너무 길 며 데 이 터 를 잠 그 는 시간 이 너무 길 기 때문에 자 연 스 럽 게 저 성능 과 저 스루풋 을 초래 할 수 있다.
따라서 실제 개발 과정 에서 성능 에 대한 요구 가 높 은 시스템 은 JTA 구성 요 소 를 사용 하여 사무 관 리 를 하 는 경우 가 드물다.경량급 분포 식 사무 해결 방안 으로서 작은 시스템 에서 도 추천 할 만하 다.
마지막 으로 자바 의 API 로 서 원리 와 용법 은 배 워 서 시야 와 방향 을 넓 힐 필요 가 있다.
소스 코드 주소
GitHub/주소
https://github.com/cicadasmile/middle-ware-parent
GitEE/주소
https://gitee.com/cicadasmile/middle-ware-parent
SpringBoot 2 가 JTA 구성 요 소 를 통합 하여 다 중 데이터 소스 트 랜 잭 션 관 리 를 실현 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 SpringBoot 2 JTA 다 중 데이터 소스 트 랜 잭 션 관리 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 지원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
SpringBoot 2 통합 FreeMarker 구현 페이지 정적 화 예시 상세 설명즉,정적 웹 페이지 는 콘 텐 츠 HTML 페이지 를 불 러 왔 습 니 다.요청 서버 데이터 와 컴 파일 과정 을 거치 지 않 고 클 라 이언 트 브 라 우 저 에 직접 불 러 옵 니 다.일반적으로 독립 된 HTML...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.