잡담소장소

[java] @Transactional 과 custom advisor 사용 시 문제 본문

Study ;3

[java] @Transactional 과 custom advisor 사용 시 문제

유부뽀 2021. 1. 15. 16:42

함수에 @Transactional과 @customadvisor 가 함께 설정되어 있을 경우

아래 이미지와 같은 이유로 transaction이 먼저 호출되어 

custom advisor 를 통해 수정된 데이터를 조회하려고 할 때 변경 전 데이터가 조회된다

 

docs.spring.io/spring-framework/docs/current/reference/html/data-access.html#tx-decl-explained

 

Data Access

The Data Access Object (DAO) support in Spring is aimed at making it easy to work with data access technologies (such as JDBC, Hibernate, or JPA) in a consistent way. This lets you switch between the aforementioned persistence technologies fairly easily, a

docs.spring.io

 

이 문제를 해결하기 위해서는 두가지의 방법이 있는데

하나는 @Transactional과 @customadvisor 를 분리하는 것이고 다른 하나는 order를 이용하는 것이다.

 

※ transactional 과 custom advisor 분리

// before
class test {
  @customadvisor 
  @Transactional
  function a(){
      // 데이터 변경
	}
}

// after
class test1 {
  @customadvisor 
  function a(){
      aa();
    }
}

class test2 {
	@Transactional
	function aa(){
		// 데이터 변경
	}
}

 

※ order 추가

// aspect 
@Aspect
@Order(1)
public class testAspect{
 ...
}

// xml 
...
<tx:annotation-driven transaction-manager="txManager" order="10" />
...
// or SpringBoot
@EnableTransactionManagement(order=10)
반응형

'Study ;3' 카테고리의 다른 글

[Python] ModuleNotFoundError 해결  (0) 2021.07.21
react + react-router tutorial  (0) 2021.06.02
[javascript] bootstrap-table export csv 문제  (0) 2021.01.13
[java] PKIX path building failed  (0) 2020.12.23
[javascript] jquery-typeahead 적용기  (0) 2020.12.02
Comments