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

时间:2017-08-14 14:23:47

标签: java spring hibernate spring-boot hikaricp

在我的项目中,它是基于Spring Boot,Hibernate和PostgreSQL(使用HikariCP)构建的,我想为整个应用程序设置事务超时 - >我只是想要终止所有需要很长时间才能终止的事务,因为这些事务可能是由用户请求启动的,而且最终可能会耗尽整个连接池。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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