멀티스레드에서 스프링 트랜잭션을 사용하는 방법
아래와 같은 방법이 있습니다.
ClassA.java
@Transactional
public void methodA(){
ExecutorService executorService = Executors.newFixedThreadPool(4);
executorService.execute(new Runnable() {
public void run() {
classB.methodB();
}
});
}
ClassB.java
@Transactional
public void methodB(){
updateDB();
}
B 방법은 잘 작동할 수 있습니까?제가 알기로는 메소드 B가 메소드 A의 트랜잭션을 첨부할 것으로 알고 있는데, 메소드 B보다 먼저 메소드 A가 종료되면 어떻게 합니까?A 방법만 거래로 커밋할 수 있을 것 같습니다.그러나 이전에 거래가 시작되었기 때문에 메서드 B는 커밋하지 않을 것입니다.
@Transactional(전파 = 전파)를 사용할 수 있습니까?메서드 B의 경우 REQUESTS_NEW).이렇게 하면 메서드 B가 새 트랜잭션을 가질 수 있습니다.그러나 Spring doc에 따르면, 메소드 A가 메소드 B를 호출할 때 메소드 A의 전송이 일시 중단됩니다.저는 여기서 매우 혼란스러워요.
이 문제에 대해 누가 저를 도와줄 수 있나요?잘 부탁드립니다.
아니요.methodB()
와 동일한 트랜잭션에서 실행되지 않습니다.methodA()
스프링스@Transactional
단일 스레드에서만 작동합니다. 스레드가 처음 메서드에 들어갈 때 세션을 만듭니다.@Transactional
(또는 클래스의 메소드)@Transactional
)을 클릭한 다음 해당 메서드를 종료할 때 커밋합니다.
이 예에서는 스레드 풀에서 작업을 예약한 후 트랜잭션이 종료됩니다.methodB()
자신만의 거래를 하게 될 겁니다
언급URL : https://stackoverflow.com/questions/10407301/how-to-use-spring-transaction-in-multithread
'programing' 카테고리의 다른 글
PHP 세션 ID 문자열의 길이는 얼마입니까? (0) | 2023.08.17 |
---|---|
IE9 jQuery AJAX with CORS에서 "Access is denied"를 반환합니다. (0) | 2023.08.12 |
가변 함수 인수 기본값에 대한 유용한 사용? (0) | 2023.08.12 |
MariaDB: 항목당 월평균 선택(Pivot 테이블) (0) | 2023.08.12 |
PowerShell에서 표준 오류 출력을 억제하려면 어떻게 해야 합니까? (0) | 2023.08.12 |