在我的基于Spring Boot,Hibernate和PostgreSQL(带有HikariCP)构建的项目中,我想为整个应用设置事务超时->我只是希望所有花费太长时间才能终止的事务,因为这些事务可以根据用户请求启动,并且很容易以耗尽整个连接池而告终。
我知道如何设置默认交易超时的一些方法,例如通过Spring Boot属性spring.transaction.default-timeout
或通过在defaultTimeout
上设置HibernateTransactionManager
属性来实现。两种解决方案都运行良好。
但是,在许多地方,项目中的长事务处理还可以,我希望那里没有超时(覆盖默认行为)。我尝试将@Transactional
与指定的timeout
参数一起使用:在这些位置上使用@Transactional(timeout = 10)
,但它不会覆盖仍在使用的默认全局值。
达到我的要求的最糟糕的方法是定义一个自定义注释,该注释将使用默认超时覆盖@Transactional
并在整个项目中使用此注释,出于许多原因,我不想这样做。
目前,我不知道其他解决方案。没有更好的了吗?谢谢。
我建议将长期运行的作业移到单独的服务应用程序中,在其中您可以设置更长的事务超时。