编程知识 cdmana.com

spring JTA 關於异常處理的時機問題

題外話:spring事務管理是通過aop完成的(aop呢也正好是用來幹這些事的)
直入正題

@Transcational
    fun demo(): Response {
        try {
        return repository.save(mockedPo)
        } catch (error: DataIntegrityViolationException) {
        throw DuplicatedPo() //一個想要拋出的自定義業務异常
        }
    }

此時方法整個交由spring事務管理,在方法執行完畢之後再進行commit或者rollback,catch的時機太早了,還沒有flush也就沒辦法觸發DataIntegrityViolationException
所以我們無法在方法內catch住DataIntegrityViolationException繼而無法拋出想要
自定義業務异常

如果强行想要在此處catch住,可以在save之後flush一下(並不會這麼做)

解决方法:
try catch放到controller層

版权声明
本文为[鄧gf]所创,转载请带上原文链接,感谢
https://cdmana.com/2021/11/20211125175541500v.html

Scroll to Top