如果我们重新启动 Spring Boot 应用程序,正在运行的用户线程发生了啥?

Posted

技术标签:

【中文标题】如果我们重新启动 Spring Boot 应用程序,正在运行的用户线程发生了啥?【英文标题】:If we restart Spring Boot application, what happened to the running user thread?如果我们重新启动 Spring Boot 应用程序,正在运行的用户线程发生了什么? 【发布时间】:2019-11-17 18:08:19 【问题描述】:

我有一个问题: 我们将重新启动/重新部署/重新发布 Spring Boot 应用程序。 如果同时有一个线程执行一些业务代码(例如将数据保存到数据库),线程会发生什么? 是不是重启后数据库状态不一致,我们正在处理的请求都失败了,无法补救?

【问题讨论】:

这取决于事务的管理方式,如果事务在业务代码末尾提交所有内容,则所有内容都将被丢弃,如果您提交数据库中的每一位数据,那么您可能会遇到您所描述的情况。 【参考方案1】:

如果您重新启动应用程序,所有线程都将丢失,用户输入的数据也会随之丢失。

如果您有 Oracle、mysql、PostgreSQL 等关系数据库,则连接将丢失,事务将回滚。由于 ACID 规则,数据不会处于不一致状态。

【讨论】:

以上是关于如果我们重新启动 Spring Boot 应用程序,正在运行的用户线程发生了啥?的主要内容,如果未能解决你的问题,请参考以下文章

我需要我的 Spring Boot Web 应用程序在 JUnit 中重新启动

以编程方式重新启动 Spring Boot 应用程序/刷新 Spring 上下文

Spring Boot - 重新启动后重新连接到数据库

在 Spring Boot 应用程序中重新加载 bean 配置 xml 文件而无需重新启动

Spring Boot,更新前端而不重新启动应用程序

Spring boot,hibernate,hikariCP和mysql在不活动后没有通信