【问题标题】: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

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

      然后您可以创建一个自定义注解,并让TransactionAnnotationParser 在看到您的注解时生成带有自定义超时的TransactionDefinition

    • 否则,解决这个问题最简单的方法就是放弃使用@Transactional,改用TransactionTemplate

    【讨论】:

      猜你喜欢
      • 2021-06-22
      • 2023-01-03
      • 2012-08-20
      • 2021-05-20
      • 1970-01-01
      相关资源
      最近更新 更多