4

So I need to set the timeout parameter for @Transactional annotation. This property will come from a property file which I'm not able to do since I'm encountering "The value for annotation attribute Transactional.timeout must be a constant expression". Something like this

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

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

The only time the timeout attribute can be set by a variable is when a variable is final.

So, I was thinking if it is possible to set the timeout property programmatically while using the @Transaction annotation. Or any other way I can set this attribute Thanks!

learning_dev_me
  • 269
  • 2
  • 3
  • 9

1 Answers1

1
  • If you need the same timeout for all transactions, you can configure it as defaultTimeout in your transaction manager

  • Otherwise, you may try to play with custom AnnotationTransactionAttributeSource and TransactionAnnotationParser, though you'll need to replace <tx:annotation-drivern> with manual definition of corresponding beans in order to configure a custom attribute source.

    Then you can create a custom annotation and make TransactionAnnotationParser generate TransactionDefinition with custom timeout when it sees your annotation.

  • Otherwise, the easiest way to solve this problem is to give up using @Transactional and use TransactionTemplate instead.

Community
  • 1
  • 1
axtavt
  • 239,438
  • 41
  • 511
  • 482