簡體   English   中英

只為一種方法更改 Hibernate 事務超時?

[英]Alter Hibernate transaction timeout for only one method?

有沒有辦法只為 Spring Boot 2 JPA 存儲庫中的一種方法更改Hibernate 默認事務超時值? 我想為我的應用程序保留默認的 30 秒(它包含使用 Hibernate SessionFactory 的 JPA 存儲庫和遺留存儲庫),但允許一個通常需要更多時間才能運行的作業(編輯:發生在獨立事務中)。 我想知道是否有一種方法可以指定特殊情況,就像您可以在某些情況下從回滾中排除事務一樣。

我正在尋找一種解決方案,它不需要創建與我用於其他方法不同的 HibernateTransactionManager。

Spring 有一個@Transactional注釋,用於標記應該在事務上下文中運行的方法(以及作用域)。 該注解有一個timeout屬性,可用於覆蓋默認超時。

請注意,超時只能在事務級別設置,因此timeout屬性僅在注釋導致新事務啟動時使用。 該文檔特別指出:“專為與 Propagation.REQUIRED 或 Propagation.REQUIRES_NEW 一起使用而設計,因為它僅適用於新啟動的事務。”

Propagation.REQUIRED只會在沒有活動事務時啟動新事務,因此如果您想確保設置超時,則需要啟動一個新事務,因此最好使用Propagation.REQUIRES_NEW

因此注釋將是: @Transactional(timeout = 30, propagation = Propagation.REQUIRES_NEW)

暫無
暫無

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

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