2014-04-02 2 views
4

그래서 @Transactional 어노테이션에 대한 시간 초과 매개 변수를 설정해야합니다. 이 속성은 "애노테이션 속성 값 Transactional.timeout이 상수 표현이어야합니다"라는 오류가 발생하여 수행 할 수없는 속성 파일에서 가져옵니다. 이 같은 것주석 속성/속성을 프로그래밍 방식으로 설정하는 방법은 무엇입니까?

@Value("${mytimeout}") 
private int myTimeout; 

@Transactional(timeout=myTimeout) 
public void myMethod(){ 
} 

변수에 의해 timeout 속성을 설정할 수있는 유일한 시간은 변수가 최종일 때입니다.

@Transaction 주석을 사용하는 동안 프로그래밍 방식으로 시간 제한 속성을 설정할 수 있다면 생각했습니다. 또는이 속성을 설정할 수있는 다른 방법 감사합니다! 당신은 모든 거래에 대해 동일한 타임 아웃을해야하는 경우가해야하지만

답변

1
  • , 당신은, 당신은 사용자 정의 AnnotationTransactionAttributeSourceTransactionAnnotationParser과 재생을 시도 할 수 있습니다,

  • 그렇지 않으면 트랜잭션 관리자에 defaultTimeout로 구성 할 수 있습니다 <tx:annotation-drivern>을 해당 bean의 수동 정의로 바꾸고 사용자 정의 속성 소스를 구성하십시오.

    사용자 정의 주석을 작성하고 TransactionAnnotationParser이 주석을 볼 때 사용자 정의 시간 초과로 TransactionDefinition을 생성하도록 할 수 있습니다.

  • 그렇지 않으면이 문제를 해결하는 가장 쉬운 방법은 @Transactional을 포기하고 대신 TransactionTemplate을 사용하는 것입니다.

관련 문제