알쓸전컴(알아두면 쓸모있는 전자 컴퓨터)

Spring @Transactional 사용시 주의점 본문

Web /Spring Framework tip

Spring @Transactional 사용시 주의점

백곳 2020. 3. 1. 17:39
@Transactional
public interface FcubeScheduledSupport1In {
    void fcubeupdateandhistorysave(Fcube item);
}
​
@Transactional
public class FcubeScheduledSupport1{
	public void fcubeupdateandhistorysave(Fcube item){
    	//select for update 구문 
    }
}
​
    @Transactional
    public void fcubeupdateandhistorysave(Fcube item){
    	//select for update 부분 
    }
   ​
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

해당 Transactional 어노테이션 사용시 mysql 에

select * from table where name = "na" for update

사용시에 다른 세션들에서 대기 하지 않는 문제가 생겼다. 

 

현재 나의 관련 설정은 아래와 같다. 

 

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource" />
</bean>

참고 => https://mybatis.org/spring/ko/transactions.html

 

mybatis-spring – 마이바티스 스프링 연동모듈 | 트랜잭션

Transactions 마이바티스 스프링 연동모듈을 사용하는 중요한 이유중 하나는 마이바티스가 스프링 트랜잭션에 자연스럽게 연동될수 있다는 것이다. 마이바티스에 종속되는 새로운 트랜잭션 관리를 만드는 것보다는 마이바티스 스프링 연동모듈이 스프링의 DataSourceTransactionManager과 융합되는 것이 좋다. 스프링 트랜잭션 관리자를 한번 설정하면, 대개의 경우처럼 스프링에서 트랜잭션을 설정할 수 있다. @Transactional 애노테이션과

mybatis.org

하지만 

    @Transactional
    public void fcubeupdateandhistorysave(Fcube item){
     //Select For Update 처리 
    }

하는 동안 Lock 이 걸리지 않았습니다. 

 

확인 결과 정상 작동은

 

Class 나 Interface 에 어노테이션을 붙혀 주었을때만 정상 작동 하였습니다. 

 

 

@Transactional
public class FcubeScheduledSupport1{
	public void fcubeupdateandhistorysave(Fcube item){
    	//select for update 구문
    }
}

 

 

위와 같이 작성 하였을때나

@Transactional
public interface FcubeScheduledSupport1In {
    void fcubeupdateandhistorysave(Fcube item);
}

 

위와 같이 작성 하였을때 

 

정상 적으로 DB에서 LOCK이 걸림을 확인 하였습니다. 

 

메소드 수준에서 왜 안걸리는지는 모르겠지만 위와 같이 작성 하여야 

 

Transactional  사용이 가능 하였습니다.

 

또한 추가적으로 

 

@Transactional(transactionManager="test")

 

같이 사용 하면 트랜젹션 매니져를 선택 적으로 Bean 에 주입 할수 있었습니다. 

 

 

Comments