一、场景

在部署java应用时有时需要通过System.setProperty的方式设置环境变量用来存储一下常用的参数。但是在实际使用中发现当多个java应用同时以此方式设置系统变量,变量名相同,且都部署在同一个server里时,这几个java应用在引用该变量时会相互干扰。

二、验证

新建两个javaweb项目,并且都在web.xml中配置自启动servlet。用以当服务启动时,对应的servlet会在初始化的时候获取并修改系统变量参数,从而判断是否会相互干扰。
servlet代码如下:

public class Test extends HttpServlet{/*** */private static final long serialVersionUID = 1L;public Test() {System.out.println("1-初始化开始");String abc = System.getProperty("abc");System.out.println("1-当前abc环境变量:"+abc);System.out.println("1-修改abc变量");System.setProperty("abc", "3333");System.out.println("1-初始化完毕");abc = System.getProperty("abc");System.out.println("1-当前abc环境变量:"+abc);}}
public class Test extends HttpServlet{/*** */private static final long serialVersionUID = 1L;public Test() {System.out.println("2-初始化开始");String abc = System.getProperty("abc");System.out.println("2-当前abc环境变量:"+abc);System.out.println("2-修改abc变量");System.setProperty("abc", "3333");System.out.println("2-初始化完毕");abc = System.getProperty("abc");System.out.println("2-当前abc环境变量:"+abc);}}

将两个javaweb应用同时部署到同一个tomcat中启动,如果两个应用彼此的系统变量相互没有干扰,则应该在控制台输出:

2-初始化开始
2-当前abc环境变量:null
2-修改abc变量
2-初始化完毕
2-当前abc环境变量:3333
1-初始化开始
1-当前abc环境变量:null
1-修改abc变量
1-初始化完毕
1-当前abc环境变量:3333

然而实际情况为:

2-初始化开始
2-当前abc环境变量:null
2-修改abc变量
2-初始化完毕
2-当前abc环境变量:3333
1-初始化开始
1-当前abc环境变量:3333
1-修改abc变量
1-初始化完毕
1-当前abc环境变量:3333

可见当在同一个server里部署多个应用且同时需要修改系统变量时,是会存在相互干扰的情况的。经测试多个java应用部署到WebSphere的同一个server里时同样会出现这种情况。

三、结论

对于同一个server里部署多个应用且同时需要修改系统变量时,如果待修改的系统变量名相同,则会出现相互干扰的情况。

四、建议

在java应用中尽可能不用系统变量来存储参数,如果必须使用,则需要注意对于同一个server,多个应用设置的系统变量名不能相同,否则可能会出现相互干扰的情况。

关于java通过System.setProperty设置环境变量作用范围验证相关推荐

  1. 在Java程序设计中,设置环境变量path和classpath的作用分别是什么?

    在Java程序设计中,设置环境变量path和classpath的作用分别是什么? asd79308 10级  分类: 编程开发  被浏览344次  2013.07.22 额,你这问题问的有够" ...

  2. Java初学者福音——自动设置环境变量

    刚开始编程尤其是以开始就接触Java时,往往对path和classpath不太理解.无论从理论还是实践都有些文章都能讲得很通透.但是即便如此,对于新手,依然有存在不会设置的. 不会设置这两个变量,基本 ...

  3. Java - 安装jdk并设置环境变量

    前言 双十一买了台新的笔记本,需要重新安装下Java,这里记录下安装的过程,毕竟万事开头难,就算是老手也不一定能一次就把Java安装成功. 安装jdk 作为一名Java开发,当然是要安装jdk了,如果 ...

  4. java基础:JDK的安装及设置环境变量

    jdk介绍 JDK是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA ...

  5. windows通过脚本批量设置环境变量(env、path)实战:java环境、scala环境、maven环境、gradle环境、nodejs、git等

    windows通过脚本批量设置环境变量(env.path)实战:java环境.scala环境.maven环境.gradle环境.nodejs.git等 目录

  6. java 代码里设置环境变量_如何在一个java程序里设置环境变量

    展开全部 环境变量是一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息.例如path,当要62616964757a686964616fe4b893e5b19e313333613064 ...

  7. 设置JAVA环境设置_Java为什么要设置环境变量、JAVA_HOME

    1. 为什么要说这个问题? 想起来两年前刚学习Java时,被要求先要设置环境变量,自然不解,随后网上找答案. 现在想来感觉当时看到的答案都是神神叨叨,含糊不清,没有几个说的明明白白的.当然也有可能是当 ...

  8. 最全:mac设置环境变量(Python/ Java/ Mysql/Allure)

    每次需要在mac上设置环境变量时,总是要重新上网搜索该怎么设置,而且只依葫芦画瓢,没搞懂每个步骤,今天痛定思痛,一定要搞清楚,一劳永逸.好,我们开始 为什么要设置环境变量? 背景 在cmd中想要执行n ...

  9. centos7/8使用yum/dnf安装java并设置环境变量

    1.首先可执行命令,检测系统是否已经存在java版本 yum list installed |grep java 已安装的话,会显示对应版本,如果已安装的版本可以满足使用,则不需要进行之后的操作,直接 ...

最新文章

  1. shell中字符串截取的几种方法
  2. R将dataframe数据保存为csv文件
  3. 技术分享丨数据仓库的建模与ETL实践技巧
  4. 超算简史:练飞天之技,登峰一战后,终有落地日 | 凌云时刻
  5. 阿里云云计算 36 PolarDB MySQL的管理步骤
  6. 微信小程序开发(后端 Java)
  7. html叫编程语言吗,html是编程语言吗
  8. Base64编码简介
  9. 【本科生科研入门】英文科技论文写作-绘图篇
  10. 【BZOJ5077】【UOJ198】【CTSC2016】时空旅行
  11. Day2 QT常用基础类型(自用)
  12. html高度塌陷问题
  13. ArcGIS Desktop、Arcengine、ArcObjects_SDK for NET.Framework安装教程
  14. 医院医生护士都不愿说的医学小常识
  15. numpy中mgrid()和meshgrid()函数
  16. 如何用 CSS 制作动画圆环图形图标
  17. CentOS下的rpm命令使用
  18. 10月23日,相约全球边缘计算大会·上海站
  19. vim替换命令(转)
  20. win10设置程序开机自启

热门文章

  1. org.postgresql.util.PSQLException: 不良的类型值 long : \x
  2. 解析大型.NET ERP系统架构设计 Framework+ Application 设计模式
  3. ABP天坑--UOW自动保存修改
  4. Eureka之使用详解
  5. 中国大豆产业的“退化”路径
  6. 计算机休眠和睡眠的区别
  7. likely和unlikely
  8. 【Android】线程间通信——Handler消息机制
  9. 简单的锁键盘锁鼠标的C++病毒代码
  10. PAT甲级题库参考答案(c++)