[SPRING] @Transactional 주석이있는 여러 트랜잭션 관리자
SPRING@Transactional 주석이있는 여러 트랜잭션 관리자
모든 트랜잭션 방식을 오버라이드하고 트랜잭션 관리자를 지정하기 위해 어떻게 트랜잭션을 구성 할 수 있습니까?
@Transactional(readOnly = true)
public abstract class GenericManagerImpl<D extends IGenericDao, T extends BaseObject, PK extends Serializable>
implements IGenericManager<T, PK> {
protected D dao;
@Autowired
public void setDao(D dao) {
this.dao = dao;
}
@Transactional(readOnly = false)
public void save(T object) {
dao.save(object);
}
@Transactional(readOnly = false)
public void remove(T object) {
dao.remove(object);
}
}
@Service
class UserManagerImpl
extends GenericManagerImpl<IUserDao, User, Long>
implements IUserManager {
// Everything is OK. User is managed by txManager1
}
@Service
class BillingManagerImpl
extends GenericManagerImpl<IBillingDao, Billing, Long>
implements IBillingManager {
@Override
@Transactional(readOnly = false, value="txManager2") // <--have to override method only to specify txManager
public void save(final Billing billing ) {
super.save(billing);
}
@Override
@Transactional(readOnly = false, value="txManager2") // <--have to override method only to specify txManager
public void remove(final Billing billing ) {
super.remove(billing);
}
}
아마 나는 aop과 @Transactional 어노테이션을 결합해야 할 것이다. 사실, 내가 원하는 건 : 1) @Transactional 어노테이션으로 트랜잭션 (읽기 전용 플래그, 전파, 격리 등)을 구성 할 수 있어야합니다. 2) 내 클래스 외부에서 트랜잭션 관리자를 선택하는 전략 정의 (예 : AOP 사용) x.y.service1. * -> txManager1 사용 x.y.service2. * -> txManager2 사용
가능한가?
해결법
-
==============================
1.@Transactional (value = "tx1")에 대한 단축키로 자신 만의 주석을 만들 수 있습니다. (클래스 또는 메서드 수준에서 사용할 수 있습니다)
@Transactional (value = "tx1")에 대한 단축키로 자신 만의 주석을 만들 수 있습니다. (클래스 또는 메서드 수준에서 사용할 수 있습니다)
참조 문서에서 :
예를 들어 다음 주석을 정의합니다.
@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Transactional("order") public @interface OrderTx { } @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Transactional("account") public @interface AccountTx { }
이전 섹션의 예제를 다음과 같이 작성할 수 있습니다.
public class TransactionalService { @OrderTx public void setSomething(String name) { ... } @AccountTx public void doSomething() { ... } }
-
==============================
2.클래스 수준에서 @Transactional을 정의 할 수 있다고 생각합니다.
클래스 수준에서 @Transactional을 정의 할 수 있다고 생각합니다.
@Service @Transactional(readOnly = false, value="txManager2") class BillingManagerImpl ....
from https://stackoverflow.com/questions/3333133/multiple-transaction-managers-with-transactional-annotation by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] ClassCastException : DispatcherServlet을 Servlet에 캐스트 할 수 없습니다. (0) | 2019.07.16 |
---|---|
[SPRING] onedrive에 파일을 업로드 할 때 Java 코드를 트리거하여 onedrive에서 파일을 다운로드하십시오. (0) | 2019.07.16 |
[SPRING] 스프링 데이터를 사용하는 동안 테이블 이름을 매개 변수의 값으로 바꾸는 방법 JPA nativeQuery (0) | 2019.07.16 |
[SPRING] Spring Data MongoDb는 $ filter 배열 집계 연산자를 지원합니까? (0) | 2019.07.16 |
[SPRING] 바람둥이 봄 MVC 시작 예외를 해결하는 방법? (0) | 2019.07.16 |