簡體   English   中英

如何以編程方式設置注釋屬性/屬性?

[英]How to set annotation property/attribute programmatically?

所以我需要為@Transactional注釋設置timeout參數。 這個屬性將來自一個屬性文件,我無法做到,因為我遇到“注釋屬性的值,Transactional.timeout必須是一個常量表達式”。 像這樣的東西

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

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

變量設置的唯一時間是變量是最終的。

所以,我在想是否可以在使用@Transaction批注時以編程方式設置超時屬性。 或者我可以設置此屬性的任何其他方式謝謝!

  • 如果所有事務都需要相同的超時,則可以在事務管理器中將其配置為defaultTimeout

  • 否則,您可以嘗試使用自定義AnnotationTransactionAttributeSourceTransactionAnnotationParser ,但是您需要將<tx:annotation-drivern>替換為相應bean的手動定義,以便配置自定義屬性源。

    然后,您可以創建自定義注釋,並使TransactionAnnotationParser在看到注釋時生成具有自定義超時的TransactionDefinition

  • 否則,解決此問題的最簡單方法是放棄使用@Transactional並改為使用TransactionTemplate

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM