休眠:关于自定义@Transactional(timeout)的默认事务超时

问题描述 投票:6回答:1

在我的基于Spring Boot,Hibernate和PostgreSQL(带有HikariCP)构建的项目中,我想为整个应用设置事务超时->我只是希望所有花费太长时间才能终止的事务,因为这些事务可以根据用户请求启动,并且很容易以耗尽整个连接池而告终。

我知道如何设置默认交易超时的一些方法,例如通过Spring Boot属性spring.transaction.default-timeout或通过在defaultTimeout上设置HibernateTransactionManager属性来实现。两种解决方案都运行良好。

但是,在许多地方,项目中的长事务处理还可以,我希望那里没有超时(覆盖默认行为)。我尝试将@Transactional与指定的timeout参数一起使用:在这些位置上使用@Transactional(timeout = 10),但它不会覆盖仍在使用的默认全局值。

达到我的要求的最糟糕的方法是定义一个自定义注释,该注释将使用默认超时覆盖@Transactional并在整个项目中使用此注释,出于许多原因,我不想这样做。

目前,我不知道其他解决方案。没有更好的了吗?谢谢。

java spring hibernate spring-boot hikaricp
1个回答
0
投票

我建议将长期运行的作业移到单独的服务应用程序中,在其中您可以设置更长的事务超时。

© www.soinside.com 2019 - 2024. All rights reserved.