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

时间:2014-04-02 07:40:18

标签: java spring spring-annotations transactional

所以我需要为@Transactional注释设置timeout参数。此属性将来自属性文件,由于我遇到"我无法执行该属性文件;注释属性Transactional.timeout的值必须是常量表达式"。像这样的东西

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

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

变量设置超时属性的唯一时间是变量是最终的。

所以,我在想是否可以在使用@Transaction批注时以编程方式设置timeout属性。或者我可以设置此属性的任何其他方式谢谢!

1 个答案:

答案 0 :(得分:1)

  • 如果所有交易需要相同的超时,您可以在事务管理器中将其配置为defaultTimeout

  • 否则,您可以尝试使用自定义AnnotationTransactionAttributeSourceTransactionAnnotationParser,但是您需要将<tx:annotation-drivern>替换为相应bean的手动定义才能配置自定义属性源。

    然后,您可以创建自定义注释,并在看到注释时使TransactionAnnotationParser生成TransactionDefinition并使用自定义超时。

  • 否则,解决此问题的最简单方法是放弃使用@Transactional并改为使用TransactionTemplate