集成 Actuator 实现优雅关闭应用
# 集成 Actuator 实现优雅关闭应用
在生产环境中,应用需要进行版本更新或维护时,往往需要优雅停机,即等待当前的工作线程完成后再停止应用,以确保数据完整性和业务连续性。Spring Boot 提供的 Actuator 是实现这一功能的一个便捷方式。
# 1. 引入 Actuator 依赖
在 pom.xml
中添加 spring-boot-starter-actuator
依赖,以启用 Actuator 功能:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
1
2
3
4
2
3
4
# 2. 配置 Actuator 端点
为了能够通过 Actuator 实现应用的优雅关闭,需要在配置文件 application.yml
或 application.properties
中启用 shutdown
端点,并设置端点的访问路径和权限。
在 application.yml
中添加以下配置:
management:
endpoint:
shutdown:
enabled: true # 启用 shutdown 端点
endpoints:
web:
exposure:
include: "shutdown" # 公开 shutdown 端点
base-path: /monitor # 设置 Actuator 端点的基础路径
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
上述配置表示 Actuator 的所有端点(包括 shutdown
端点)将通过 /monitor
路径进行访问。
# 3. 配置安全访问权限
为了保证系统安全,只有特定权限的用户才能触发 shutdown
操作。因此,需要在 SecurityConfig.java
中配置 shutdown
端点的访问权限。
在 SecurityConfig.java
中添加如下代码:
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
// 省略其他代码...
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.authorizeRequests()
.antMatchers("/monitor/shutdown").anonymous() // 允许匿名访问 shutdown 端点
.and()
.csrf().disable(); // 关闭 CSRF 保护
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 4. 触发优雅停机
完成以上配置后,可以通过 POST 请求触发应用的优雅关闭操作。可以使用 curl
命令进行测试:
curl -X POST http://localhost:8080/monitor/shutdown
1
执行该命令后,Spring Boot 会等待当前正在执行的请求处理完毕,然后优雅地关闭应用。
# 5. 注意事项
- 安全性:在生产环境中,应该严格控制
shutdown
端点的访问权限,建议仅允许内部或特定的管理员角色访问。 - 超时设置:如果希望在指定时间内强制关闭应用,可以通过 Spring Boot 的
server.shutdown
属性进行设置。
总结
通过引入 Actuator 依赖,并配置 shutdown
端点和安全策略,可以实现 Spring Boot 应用的优雅停机。这种方法能够确保在停止应用时,正在执行的任务能够完成,避免数据丢失和业务中断。
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08