2012-04-10 1 views
1

드문 경우이지만 두 스레드가 동일한 트랜잭션 중에 동일한 데이터를 데이터베이스에 삽입하려고합니다. 두 번째 스레드가 나는 동시성 실패 예외가 삽입을 시도 할 때 : ORA-00028 : 당신의 세션이두 스레드가 동일한 데이터를 INSERT하려고 할 때 다중 스레드 프로그램에서 ConcurrencyFailureException을 무시하는 것이 안전합니까?

메신저 사용 springframework.jdbc (데이터가 동일한 경우에만) ... 살해 된

인가 붙잡고이 예외를 무시하는 것이 안전할까요? springjdbc에 잠금 메커니즘이 있습니까?

+0

어떻게 '동일한'트랜잭션이 여러 스레드로 끝났습니까? – artbristol

+0

죄송합니다. 용어가 섞여 있습니다. 나는 2 개의 스레드, 2 개의 트랜잭션이 동일한 데이터를 삽입한다. 두 번째 스레드가 동일한 데이터를 삽입하려고하면 ConcurrencyFailureException이 발생하고 연결이 닫힌 것 같습니다. 나는 세션을 열어 두어야하기 때문에 그냥 붙잡고 무시할 수 없다. 이 상황을 어떻게 막을 수 있습니까? – ollo

답변

1

거기에 까다로운 문제가 있습니다. 가능한 경우 이러한 동시 삽입을 피하기 위해 데이터 모델을 재 설계하십시오. 그렇지 않으면 다음을 살펴보십시오. http://michaeljswart.com/2011/09/mythbusting-concurrent-updateinsert-solutions/

+0

아아아, 데이터 모델을 재 설계 할 수 없거나 허용 할 수 없습니다. 옵션을 가져 주셔서 감사합니다. 나는 Spring이 이런 종류의 동시성을 다루는 방법을 가지길 희망했다. – ollo

관련 문제