如何在作为Maven依赖的Apache Tomcat 9中添加健康检查端点?
配置嵌入式Tomcat 9的HealthCheckValve健康检查端点
当你把Tomcat 9作为Maven依赖(嵌入式场景)使用时,不需要修改独立Tomcat的server.xml,而是通过以下两种常见场景配置:
场景1:使用Tomcat Maven插件运行
如果项目依赖tomcat9-maven-plugin启动Tomcat,有两种配置方式:
方式1:自定义server.xml
- 在项目根目录下创建
src/main/tomcat文件夹,新建server.xml文件 - 在文件的
<Engine>、<Host>或<Context>节点下添加Valve配置:
<Valve className="org.apache.catalina.valves.HealthCheckValve" uri="/health" />
- 在pom.xml的插件配置中指定自定义server.xml路径:
<plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat9-maven-plugin</artifactId> <version>2.2</version> <configuration> <serverXml>src/main/tomcat/server.xml</serverXml> <!-- 其他配置:端口、上下文路径等 --> </configuration> </plugin>
方式2:直接在插件中配置Valve
无需额外的server.xml,直接在插件配置中嵌入Valve参数:
<plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat9-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>8080</port> <path>/</path> <valves> <valve> <className>org.apache.catalina.valves.HealthCheckValve</className> <param> <name>uri</name> <value>/health</value> </param> </valve> </valves> </configuration> </plugin>
场景2:自定义代码启动嵌入式Tomcat
如果是通过Java代码手动启动Tomcat(比如Spring Boot嵌入式Tomcat或纯自定义实现):
- 确保Maven依赖包含tomcat-catalina:
<dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-catalina</artifactId> <version>9.0.x</version> <!-- 替换为你使用的具体版本 --> </dependency>
- 在启动代码中添加HealthCheckValve到Tomcat的管线中:
import org.apache.catalina.Context; import org.apache.catalina.startup.Tomcat; import org.apache.catalina.valves.HealthCheckValve; public class EmbeddedTomcatStarter { public static void main(String[] args) throws Exception { Tomcat tomcat = new Tomcat(); tomcat.setPort(8080); // 加载Web应用上下文 Context context = tomcat.addWebapp("/", System.getProperty("user.dir") + "/src/main/webapp"); // 初始化并添加健康检查Valve HealthCheckValve healthValve = new HealthCheckValve(); healthValve.setUri("/health"); // 可省略,默认就是/health context.getPipeline().addValve(healthValve); tomcat.start(); tomcat.getServer().await(); } }
配置完成后,启动Tomcat,访问http://localhost:8080/health即可收到200 OK的健康响应。
内容的提问来源于stack exchange,提问作者mdanish98
相关产品推荐
相关产品推荐

