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



在我的项目中,它建立在Spring Boot,Hibernate和PostgreSQL(使用HikariCP(上,我想为整个应用程序设置事务超时 ->我只是希望终止所有花费太长时间的事务,因为这些事务可以通过用户请求启动,并且很容易耗尽整个连接池。

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

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

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

目前,我不知道任何其他解决方案。难道没有比这更好的吗? 谢谢。

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

最新更新