블로그 이미지
잡초 개발자의 좌충우돌 이야기 yysvip

카테고리

분류 전체보기 (211)
Java Programing (24)
Web Programing (20)
Database (36)
Tool (46)
까칠한 IT (27)
까칠한 정보 (42)
까칠한 Strory (16)
까칠한 Project (0)
Total906,313
Today3,796
Yesterday7,350

달력

« » 2018.10
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

공지사항

org.springframework.transaction.IllegalTransactionStateException

  까칠한 남자 Strory       yysvip.tistory.com       잡초 개발자 까찰한 쑤의 좌충우돌 개발 이야기

 

 

Caused by: org.springframework.transaction.IllegalTransactionStateException: Transaction is already completed - do not call commit or rollback more than once per transaction

 

해당 오류가 발생했다.

원인은 이미 commit/rollback 을 했기 때문에 더 하지 말라는 얘기란다.

 

 이곳저곳을 찾아보니 아래와 같은 글이 있었다.

아래 글과 같이 이번 오류도 스프링의 트렌젝션을 사용하고 있으나 다른 곳의 메소드에서 또 다시 강제로 commit처리를 하고 있었다. 여러 메소드를 호출중 한 곳에서 오류가 발생하여 rollback을 하였으나 다른 메소드에서 이를 무시한체 강제 commit 처리를 하여 해당 오류가 발생한것이였다...

 

 다음 프로젝트에선 해댱내용을 숙지하고 조심해야할듯 하다. 

 

--- 아래 ---

 스프링에서 제공하는 JtaTransactionManager, DataSourceTransactionManager 를 사용해서 commit, rollback 을 프로그램으로 하려다 보니 발생하는 문제이다.

 

 프로그램으로만 하면 사실 처리할 수 있으나, 선언적 트랜잭션 - 예를 들어 메소드명을 가지고 AOP 를 통해서 트랜잭션을 처리하려고 하는 경우가 많은데, 이때 선언전 트랜잭션도 이미 적용되어 있고, 프로그램으로도 commit/rollback 하려다 보니 스프링에서 오류를 내뱉는 것이다.

 

이럴 경우에는 선언적 트랜잭션만을 사용해서 처리하거나, 굳이 commit/rollback 을 사용하여야 한다면 별도의 BasicDataSource 를 선언한 후에 connection 을 가져와서 commit/rollback을 프로그램으로 하면 된다.

 

Posted by yysvip

최근에 달린 댓글

최근에 받은 트랙백

글 보관함