복붙노트

[SPRING] Spring과 Hibernate를 이용한 다중 데이터베이스 트랜잭션 관리

SPRING

Spring과 Hibernate를 이용한 다중 데이터베이스 트랜잭션 관리

자체 시스템 데이터베이스에 Insert / Update가있는 Spring & Hibernate 응용 프로그램이 생겨나 고 다른 데이터베이스 유형을 가진 다른 시스템을 삽입 / 업데이트해야합니다.

다른 데이터베이스를 사용하면서 Hibernate로 트랜잭션 관리를 어떻게 달성 할 수 있습니까?

- 바라트

해결법

  1. ==============================

    1.여러 데이터 소스가 포함 된 트랜잭션을 찾고 있다고 가정 할 때 David Syer (spring lead)의 다음 일련의 게시물을 옵션별로 제공하는 것이 좋습니다.

    여러 데이터 소스가 포함 된 트랜잭션을 찾고 있다고 가정 할 때 David Syer (spring lead)의 다음 일련의 게시물을 옵션별로 제공하는 것이 좋습니다.

    http://www.javaworld.com/article/2077963/open-source-tools/distributed-transactions-in-spring--with-and-without-xa.html

    예를 들어, 일부 데이터베이스는 분산 트랜잭션이없는 특정 상황에서 데이터베이스 스키마간에 트랜잭션을 지원하기도합니다 (여기 참조).

    XA 2 단계 커밋 트랜잭션 관리자 이외의 다른 옵션이 있습니다 (상당한 오버 헤드와 복잡성을 초래하므로). 그러나 서로 다른 단점이 있습니다.

  2. ==============================

    2.두 개의 개별 트랜잭션 관리자를 지정할 수 있습니다.

    두 개의 개별 트랜잭션 관리자를 지정할 수 있습니다.

        <bean id="transactionManager1"
        class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory1" />
        <qualifier value="account"/>
    </bean>
    
    <bean id="transactionManager2"
        class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory2" />
        <qualifier value="businessData"/>
    </bean>
    

    설정이 완료되면 한정자를 사용하여 트랜잭션 관리자를 지정할 수 있습니다.

        public class TransactionalService {
    
    @Transactional("account")
    public void setSomethingInAccount() { ... }
    
    @Transactional("businessData")
    public void doSomethingInBusinessData() { ... }
    }
    
  3. ==============================

    3.이는 애플리케이션이 실행되는 컨테이너 (예 : JBoss App Server)에서 수행해야하거나 Bitronix와 같은 다른 트랜잭션 관리자에 연결해야합니다. JavaSE 애플리케이션의 초기 상태에서 여러 데이터 소스 간의 트랜잭션을 관리하는 데 "최선의 노력"을 기울일 수 있습니다.

    이는 애플리케이션이 실행되는 컨테이너 (예 : JBoss App Server)에서 수행해야하거나 Bitronix와 같은 다른 트랜잭션 관리자에 연결해야합니다. JavaSE 애플리케이션의 초기 상태에서 여러 데이터 소스 간의 트랜잭션을 관리하는 데 "최선의 노력"을 기울일 수 있습니다.

    XA 드라이버를 사용하여 두 데이터베이스에 대한 연결을 정의한 다음 트랜잭션 관리자가 2 단계 커밋을 사용하는지 확인해야합니다.

    글로벌 거래에 익숙하지 않은 경우 http://docs.spring.io/autorepo/docs/spring/4.2.x/spring-framework-reference/html/transaction.html#transaction-global에서 시작하십시오.

  4. from https://stackoverflow.com/questions/36802871/transaction-management-for-multiple-database-using-spring-hibernate by cc-by-sa and MIT license