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