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

3 篇文章 0 订阅

一、场景

在部署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,多个应用设置的系统变量名不能相同,否则可能会出现相互干扰的情况。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java中,可以使用`System.setProperty()`方法来设置系统级别的变量。如果您想要重置一个已经设置的系统变量,可以使用`System.clearProperty()`方法来清除该变量。 以下是将系统级别的变量重置为默认值的代码示例: ```java System.clearProperty("your.property.key"); //清除该变量 System.setProperty("your.property.key", "default value"); //重置为默认值 ``` 在上述代码示例中,您需要将"your.property.key"替换为要重置的系统变量的键,并将"default value"替换为该变量的默认值。 ### 回答2: Java中的System.setProperty()方法用于设置系统属性的值。这些系统属性通常用于在应用程序中共享全局变量或配置信息。 要将System.setProperty()方法设置的全局变量重置,可以使用System.clearProperty()方法。该方法允许我们移除之前设置的系统属性,并将其值重置为默认值。 例如,假设我们使用System.setProperty()方法将一个全局变量myVariable设置为"value1": System.setProperty("myVariable", "value1"); 然后,如果我们希望将该全局变量重置为默认值,可以使用System.clearProperty()方法: System.clearProperty("myVariable"); 这样,系统将移除之前设置的myVariable属性,并将其重置为默认值。在这种情况下,myVariable属性将被删除,并且使用System.getProperty("myVariable")方法将返回null。 需要注意的是,System.clearProperty()方法只适用于通过System.setProperty()方法设置的全局变量。如果全局变量是通过其他方式设置的(例如通过命令行参数或配置文件),则无法使用该方法进行重置。 总结而言,要重置由System.setProperty()方法设置的全局变量,在Java中可以使用System.clearProperty()方法来移除该属性并将其重置为默认值。 ### 回答3: 在Java中,System.setProperty方法用于设置系统级属性,可以在程序中全局访问。 如果需要重置System.setProperty设置的全局变量,可以使用System.clearProperty方法来清除相应的系统属性。 该方法的语法如下: System.clearProperty(String key) 其中,key参数是要清除的系统属性的名称。 调用该方法后,系统属性将被重置为空值,无法再通过System.getProperty方法来获取相应的值。 例如,我们在程序中设置了一个全局的系统属性: System.setProperty("myProperty", "value"); 然后,如果我们想要重置该全局变量,可以调用以下代码: System.clearProperty("myProperty"); 该调用将清除名为"myProperty"的系统属性,使其不再可访问。 需要注意的是,System.clearProperty方法只能用于清除通过System.setProperty方法设置的全局变量,无法清除其他类型的全局变量或局部变量。此外,由于系统属性是全局的,一旦重置后,其他程序或线程将无法再访问该属性的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值