알쓸전컴(알아두면 쓸모있는 전자 컴퓨터)
Spring @Transactional 사용시 주의점 본문
@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
하지만
@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 에 주입 할수 있었습니다.
'Web > Spring Framework tip' 카테고리의 다른 글
QueryDSL Custom Funtion 등록 및 where 절에서 Index 사용하도록 하는 방법 (1) | 2020.04.06 |
---|---|
spring security + CustomProvider + OAuth2 + JWT Server 설정 및 설명 (GrantTypes은 Password,refresh_token) (0) | 2020.03.04 |
intellij 에서 json 을 class object Dto 자동 생성 Plugin 소개 (0) | 2019.10.28 |
Spring Boot, MyBatis 연동[멀티 데이터 베이스] (0) | 2019.07.08 |
spring -> tomcat 원격 배포 deploy (0) | 2018.10.23 |
Comments