@Transactional 관련
- 작성자 :
- 이*호
- 작성일 :
- 2016-06-22 10:44:13
- 조회수 :
- 1,004
- 구분 :
- 개발환경
- 진행상태 :
- 완료
Q
안녕하세요
Transaction이 동작하지 않아 확인하는 과정에서 다음 내용 관련 문의 드립니다.
Service class 구조입니다.
public class TestServiceImpl implements TestService {
@Resource(name="testDAO")
public TestDAO testDAO;
@Async
public void test1(){
...
testDAO.insert();
}
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = { Exception.class })
public Object test2() throws Exception {
...
testDAO.insert2();
}
위와 같은 상황에서 test2()의 Transaction이 동작하지 않아 test1()의 @Async 어노테이션을 삭제하였더니
정상적으로 Transaction 이 동작하는 것을 확인했습니다.
같은 Class 내에서 @Async 와 @Transactional 을 사용하면 문제가 있는것인지요?
아니면 다른 소스 자체구조의 문제인지 원인이 궁금합니다.
그럼 좋은 하루되십시요
감사합니다.
Transaction이 동작하지 않아 확인하는 과정에서 다음 내용 관련 문의 드립니다.
Service class 구조입니다.
public class TestServiceImpl implements TestService {
@Resource(name="testDAO")
public TestDAO testDAO;
@Async
public void test1(){
...
testDAO.insert();
}
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = { Exception.class })
public Object test2() throws Exception {
...
testDAO.insert2();
}
위와 같은 상황에서 test2()의 Transaction이 동작하지 않아 test1()의 @Async 어노테이션을 삭제하였더니
정상적으로 Transaction 이 동작하는 것을 확인했습니다.
같은 Class 내에서 @Async 와 @Transactional 을 사용하면 문제가 있는것인지요?
아니면 다른 소스 자체구조의 문제인지 원인이 궁금합니다.
그럼 좋은 하루되십시요
감사합니다.
A
이용호님, 안녕하세요.
Async 어노테이션을 사용시 기존 트랜잭션과는 별개로 다른 스레드에서 해당 내용이 동작하므로 트랜잭션이 정상적으로 수행되지 않는 문제가 발생할 소지가 있습니다.
구현하신 로직에서 관련 부분을 검토하시고 개선하셔야 할 부분으로 생각됩니다.
외부링크를 하나 첨부하오니, 참고해 보시기 바랍니다.
https://slipp.net/questions/10
감사합니다.
Async 어노테이션을 사용시 기존 트랜잭션과는 별개로 다른 스레드에서 해당 내용이 동작하므로 트랜잭션이 정상적으로 수행되지 않는 문제가 발생할 소지가 있습니다.
구현하신 로직에서 관련 부분을 검토하시고 개선하셔야 할 부분으로 생각됩니다.
외부링크를 하나 첨부하오니, 참고해 보시기 바랍니다.
https://slipp.net/questions/10
감사합니다.