Jersey应用打包war部署Tomcat运行时如何传递启动参数
war包启动传参问题解答
war包本身没有可执行jar那种java -jar xxx.jar 自定义参数的直接传参形式,但可以通过3种成熟方案实现和jar包传参等效的效果,完全适配Jersey+Tomcat的部署场景:
方案1:通过JVM系统属性传递(最常用,灵活度最高)
- 配置方式:Tomcat启动前设置启动参数即可,不需要修改war包内容:
- Linux环境:修改
tomcat/bin/catalina.sh,添加export CATALINA_OPTS="-D自定义参数名=参数值",也可以在启动命令前直接加环境变量:CATALINA_OPTS="-Dxxx=yyy" ./startup.sh - Windows环境:修改
tomcat/bin/catalina.bat,添加set CATALINA_OPTS=-D自定义参数名=参数值
- Linux环境:修改
- 代码获取方式:在Jersey项目任意位置调用
System.getProperty("自定义参数名")即可读取参数值,启动监听、资源类里都可以正常调用。
方案2:通过Tomcat上下文参数配置
- 配置方式:不需要重新打包war,修改Tomcat侧配置即可:
在tomcat/conf/Catalina/localhost/[你的应用上下文名称].xml中添加配置:
也可以直接写在项目的<Parameter name="自定义参数名" value="参数值" override="false" />WEB-INF/web.xml里,适合固定不需要经常修改的参数。 - 代码获取方式:通过注入
ServletContext调用getInitParameter("自定义参数名")读取,也可以在ServletContextListener的启动回调里读取参数做全局初始化。
方案3:通过系统环境变量传递(适合容器化部署场景)
- 配置方式:在启动Tomcat的运行环境中设置自定义环境变量即可,Docker部署时直接通过
-e 参数名=参数值传递即可。 - 代码获取方式:调用
System.getenv("自定义参数名")读取参数值。
如果需要每次启动灵活调整参数、不想修改固定配置,优先选择方案1或者方案3,使用体验和可执行jar传参基本一致。
内容的提问来源于stack exchange,提问作者Vaibh Manchanda
相关产品推荐
相关产品推荐

