【问题标题】:How to set annotation property/attribute programmatically?如何以编程方式设置注释属性/属性?
【发布时间】:2014-04-02 07:40:17
【问题描述】:
所以我需要为@Transactional注解设置超时参数。此属性将来自我无法执行的属性文件,因为我遇到“注释属性 Transactional.timeout 的值必须是常量表达式”。像这样的
@Value("${mytimeout}")
private int myTimeout;
@Transactional(timeout=myTimeout)
public void myMethod(){
}
只有当变量为final时才能设置超时属性。
所以,我在考虑是否可以在使用 @Transaction 注释时以编程方式设置超时属性。或者我可以设置此属性的任何其他方式谢谢!
【问题讨论】:
标签:
java
spring
spring-annotations
transactional
【解决方案1】:
-
如果您需要所有事务的超时时间相同,您可以在事务管理器中将其配置为defaultTimeout
-
否则,您可以尝试使用自定义AnnotationTransactionAttributeSource 和TransactionAnnotationParser,尽管您需要将<tx:annotation-drivern> 替换为相应bean 的手动定义才能配置自定义属性源。
然后您可以创建一个自定义注解,并让TransactionAnnotationParser 在看到您的注解时生成带有自定义超时的TransactionDefinition。
-
否则,解决这个问题最简单的方法就是放弃使用@Transactional,改用TransactionTemplate。