如何在Servlet/JSP中配置多环境变量并读取(求代码示例)
Servlet/JSP 多环境配置读取实现方案
1. 前置说明
你提供的application.yaml是Kubernetes部署配置片段,作用是将ConfigMap中config的dev键值注入为容器环境变量ENV_DEV。在Servlet/JSP应用中,我们直接读取容器注入的系统环境变量即可实现多环境配置读取。
2. Servlet中读取环境变量
编写Servlet类,通过System.getenv()方法直接读取环境变量:
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; @WebServlet("/env") public class EnvReaderServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); // 读取K8s注入的环境变量 String envDevValue = System.getenv("ENV_DEV"); // 若需区分多环境,可读取通用环境标识变量(比如ENV_TYPE) String envType = System.getenv("ENV_TYPE"); // 对应dev/predev/uat/prod out.println("<h1>当前环境配置</h1>"); out.println("<p>ENV_DEV: " + (envDevValue != null ? envDevValue : "未配置") + "</p>"); out.println("<p>当前环境类型: " + (envType != null ? envType : "未知") + "</p>"); } }
3. JSP中读取环境变量
方式1:直接使用脚本片段读取
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>环境配置读取</title> </head> <body> <h1>当前环境配置</h1> <p>ENV_DEV: <%= System.getenv("ENV_DEV") != null ? System.getenv("ENV_DEV") : "未配置" %></p> <p>环境类型: <%= System.getenv("ENV_TYPE") != null ? System.getenv("ENV_TYPE") : "未知" %></p> </body> </html>
方式2:通过EL表达式读取(需提前初始化到ServletContext)
先编写ServletContextListener初始化环境变量到上下文:
import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; @WebListener public class EnvInitListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { // 将环境变量存入ServletContext,供JSP通过EL读取 sce.getServletContext().setAttribute("envDev", System.getenv("ENV_DEV")); sce.getServletContext().setAttribute("envType", System.getenv("ENV_TYPE")); } }
然后在JSP中使用EL表达式:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>环境配置读取</title> </head> <body> <h1>当前环境配置</h1> <p>ENV_DEV: ${envDev != null ? envDev : '未配置'}</p> <p>环境类型: ${envType != null ? envType : '未知'}</p> </body> </html>
4. 多环境部署注意事项
- 针对dev/predev/uat/prod环境,分别创建对应ConfigMap(如
config-dev、config-predev等),部署时切换ConfigMap关联即可。 - 若需统一环境标识,可在K8s部署文件中添加
ENV_TYPE环境变量,值对应当前环境(dev/predev/uat/prod),方便应用逻辑区分环境。
内容的提问来源于stack exchange,提问作者sharma vh
相关产品推荐
相关产品推荐

