SpringBoot+JPA+Hibernate+MySQL写入数据需重启库才对外可见如何解决
问题解决方案
该问题不需要调整MySQL 5.6服务端配置,优先修改应用的数据库连接和JPA配置即可解决,核心原因是写入操作的事务未正常提交,其他连接无法看到未提交的数据,MySQL重启时会强制断开所有应用连接,事务才被强制提交,数据因此可见。
修改配置项
你可以按以下优先级调整配置:
- 补充JPA相关配置,确保auto-commit属性不被Hibernate覆盖,原有基础上追加以下配置:
spring: jpa: open-in-view: false properties: hibernate.connection.autocommit: true hibernate.transaction.auto_close_session: true hibernate: connection: provider_disables_autocommit: true
说明:Spring Boot默认开启
open-in-view会导致Hibernate Session在整个Web请求周期内持有,事务延迟到请求完全结束才提交,容易出现长事务、Session泄漏导致事务未提交的问题,建议优先关闭。
- 检查业务代码中的
@Transactional注解使用,如果业务逻辑不需要事务,删掉多余的事务注解即可,事务注解会强制把连接的auto-commit属性改为false,只有方法执行完成无异常才会提交事务。 - 先排查第三方工具的问题:写入数据后在DBeaver中执行
rollback;刷新当前连接的事务快照再查询,如果能查到数据说明是DBeaver自身开启了长事务,默认不提交导致读取的是旧快照,不需要调整应用配置。
验证逻辑
修改配置后写入数据,不需要重启MySQL,在DBeaver中刷新即可查到新写入的数据即为修复完成。
内容的提问来源于stack exchange,提问作者Techniquab
相关产品推荐
相关产品推荐

