如何以编程方式设置注释属性/属性?

4

我需要为@Transactional注解设置超时参数。这个属性将来自一个属性文件,但由于遇到“注释属性Transactional.timeout的值必须是常量表达式”的问题,我无法实现。类似这样:

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

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

只有在变量为final时,timeout属性才能通过变量设置。

因此,我在思考是否可以在使用@Transaction注解时以编程方式设置timeout属性,或者是否有其他方法可以设置此属性。谢谢!

1个回答

1
如果您需要所有事务使用相同的超时时间,您可以在事务管理器中将其配置为defaultTimeout
否则,您可以尝试使用自定义的AnnotationTransactionAttributeSourceTransactionAnnotationParser,虽然您需要用相应的bean手动定义替换<tx:annotation-driver>以配置自定义属性源。
然后,您可以创建一个自定义注释,并使TransactionAnnotationParser在看到您的注释时生成带有自定义超时的TransactionDefinition
否则,解决此问题最简单的方法是放弃使用@Transactional,改用TransactionTemplate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接