在我的项目中,它是基于Spring Boot,Hibernate和PostgreSQL (使用HikariCP)构建的,我想为整个应用程序->设置事务超时,我只是希望终止所有花费太长时间的事务,因为这些事务可以由用户请求启动,并且很容易耗尽整个连接池。
我知道一些设置默认事务超时的方法,例如通过Spring Boot属性spring.transaction.default-timeout或在HibernateTransactionManager上设置defaultTimeout属性。这两种解决方案都运行得很好。
然而,在许多地方,长事务在项目中是可以的,我不希望在那里有超时(覆盖默认行为)。我尝试在这些地方使用带有指定timeout参数:@Transactional(timeout = 10)的@Transactional,但它不会覆盖仍然使用的默认全局值。
要实现我的需求,最糟糕的方法是定义一个自定义注释,该注释将使用默认超时覆盖@Transactional,并在整个项目中使用此注释,出于多种原因,我不希望这样做。
目前,我不知道有任何其他解决方案。没有更好的东西了吗?谢谢。
发布于 2019-12-13 02:29:00
我建议将长时间运行的作业移动到单独的服务应用程序中,在该应用程序中可以设置更长的事务超时。
https://stackoverflow.com/questions/45676750
复制相似问题