下面是服务层中有一个方法调用了另一个第三方服务,同时它使用JPA存储库进行查询,并导致org.springframework.dao. DataBase ResourceFailureException的情况:
Unable to acquire JDBC Connection; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection
at ....
字符串
你认为我该如何处理这个而不是在第三方调用部分上使用断路器?无论什么原因,该方法可能需要一些时间来执行,但我不想保持与数据库连接。有什么方法可以处理这个吗?
1条答案
按热度按时间ego6inou1#
如果在执行REST调用时保持DB连接打开,这将是最简单的。如果它是一个简单的
SELECT
,那么它不会消耗太多资源:字符串
但如果你不想保持连接打开(这是更好的),那么简单地重新设计它如下:
型
因此,您的
m1()
方法不再是@Transactional
,而TX现在在第一行开始和结束。或者,您可以进行编程式的TX管理,而不必将TX相关逻辑移动到单独的服务中。附言:虽然这不是一个好的做法,但你也可以将Repository方法标记为
@Transactional
-这样你就不必将TX调用委托给另一个服务。例如Spring Data就是这样做的。根据对代码质量的期望,这可能是可以接受的。