Java 与 Spring:运维视角¶
本分类不以 Java 语言开发为主,而是回答运维交付中的实际问题:应用需要哪个 Java 版本、JAR 怎样启动、镜像怎样制作、Spring 配置怎样从外部注入、日志去哪看,以及 CPU、内存、线程、连接池和启动失败时如何取证。
开发交付 JAR
→ 确认 Java / Spring Boot 兼容关系
→ 制作不可变运行镜像
→ 外挂环境配置与 Secret
→ 设置 JVM、资源限制和健康检查
→ 收集日志、指标、线程栈、Heap Dump / JFR
→ 定位应用、JVM、容器或外部依赖问题
内容结构¶
运行参数先读 JVM 核心参数与系统影响,理解内存预算、GC 与 CPU 的取舍,再进入故障取证。
- Java 运行环境与启动:JDK/JRE、版本确认、JVM 参数、systemd/容器启动检查。
- Spring Boot 外部配置:配置文件、Profile、环境变量、启动参数和覆盖顺序。
- Spring Cloud 运维组件:注册配置、Gateway、客户端治理和运行排障。
- 容器镜像制作:基础镜像、非 root 用户、JAR 分层、健康检查和资源参数。
- 日志与可观测性:标准输出、日志格式、Actuator、指标和安全边界。
- JVM 与 Spring 排障:启动失败、CPU 高、内存上涨、OOM、线程阻塞、连接池耗尽。
运维接收应用时至少确认¶
| 项目 | 必须得到的信息 |
|---|---|
| 制品 | JAR 名称、校验值、版本/提交 SHA、启动方式 |
| 运行环境 | Java 主版本、CPU 架构、时区、字符集、所需字体/系统库 |
| 配置 | 默认配置、外部配置目录、Profile、必填变量、Secret 来源 |
| 资源 | 推荐的内存/CPU、JVM 参数、临时目录、磁盘增长点 |
| 端口 | HTTP、管理端口、调试端口以及是否只能内网访问 |
| 依赖 | 数据库、Redis、Kafka、外部 API、DNS 与证书要求 |
| 健康检查 | 启动、就绪、存活判断方式及正常响应 |
| 排障能力 | 日志位置、Actuator、GC 日志、线程栈与 Heap Dump 获取方式 |
只有“JAR 能启动”不代表交付完成。必须验证重启、配置覆盖、依赖不可用、日志轮转、健康检查、资源限制和故障取证。
服务拆分、通信、容错和数据一致性的通用原则统一放在 微服务,这里仅补充 Java/Spring 的具体运行实现。