如何将shell变量传递到Java代码实现代理配置环境无关性
解决方案
1. 调整Java代码读取环境变量
你可以直接通过Java内置的System.getenv()方法读取Linux系统的环境变量,修改后的代码如下:
import io.restassured.response.Response; import step_definitions.StepDefinitions; private Response getCyaraResponse(String cyaraService) { try { RestAssured.useRelaxedHTTPSValidation(); // 读取环境变量中的代理配置,未配置时默认不使用代理 String proxyHost = System.getenv().getOrDefault("HTTP_PROXY_HOST", ""); String proxyPortStr = System.getenv().getOrDefault("HTTP_PROXY_PORT", "3128"); int proxyPort = 3128; // 校验端口格式合法性 try { proxyPort = Integer.parseInt(proxyPortStr); } catch (NumberFormatException e) { log.warn("代理端口格式错误,使用默认端口3128"); } // 代理地址不为空时才设置代理 if (!proxyHost.isBlank()) { RestAssured.proxy(proxyHost, proxyPort); } log.debug("Get URL: " + baseUrl + accountNum + cyaraService); Response actualResponse = given().headers("Authorization", keyToken) .get(baseUrl + accountNum + cyaraService); return actualResponse; } catch (Exception e) { e.printStackTrace(); } return null; }
以上代码默认从HTTP_PROXY_HOST和HTTP_PROXY_PORT两个环境变量读取代理配置,你也可以根据自己的习惯修改环境变量名。如果环境变量没有配置代理地址,代码会自动跳过代理设置,适配不需要代理的运行环境。
2. Shell端传递变量的方法
临时生效(仅对当前启动的Java进程生效)
启动Java程序前直接在命令行前缀变量即可:
HTTP_PROXY_HOST=web-proxyapp.xxxxx-dns.com HTTP_PROXY_PORT=3128 java -jar 你的应用包名.jar
如果是用Maven/Gradle执行测试,同样可以在命令前加变量:
HTTP_PROXY_HOST=web-proxyapp.xxxxx-dns.com HTTP_PROXY_PORT=3128 mvn test
会话级生效(当前Shell窗口所有命令都生效)
先执行export命令设置环境变量:
export HTTP_PROXY_HOST=web-proxyapp.xxxxx-dns.com export HTTP_PROXY_PORT=3128
之后直接启动Java程序/执行测试命令即可,不需要每次都加前缀。
永久生效(对当前用户所有Shell会话生效)
把上面两条export命令写入当前用户的~/.bashrc(或者~/.bash_profile)文件,执行source ~/.bashrc后即可永久生效。
内容的提问来源于stack exchange,提问作者tarun
相关产品推荐
相关产品推荐

