问题描述
我看过代码:
public static final boolean SUPRESS_CHECK = "true".equals(System.getProperty("sdp.authz.disable", "false"));
- 此属性有什么样的用途?
- 为什么我们必须使用系统属性设置和获取?
- 什么时候应该使用系统属性。
1楼
这些系统属性是JVM范围的参数。 如果以您的示例为例,您可以在启动VM时通过它们:java -Dsdp.authz.disable = true -jar yourJar.jar
除非您将此参数传递给true,否则sdp.authz.disable的默认值为false。
这使您可以使用相同的代码,但可以根据上下文(例如开发人员或生产人员)更改应用程序的行为
2楼
java.lang.System.getProperties()方法确定当前的系统属性。 由getProperty(String)方法使用的当前系统属性集作为Properties对象返回。
如果没有当前的系统属性集,则首先创建并初始化一组系统属性。
例:
public class SystemDemo {
public static void main(String[] args) {
// this will list the current system properties
Properties p = System.getProperties();
p.list(System.out);
}
}
3楼
根据java docs,系统属性被广泛用于维护应用程序的配置。 我们可以使用此属性在运行时更改应用程序的行为。
请参阅以下链接以获取更多信息: :
系统属性的用法:
假设我们为我们的应用程序提供了不同的数据库服务器,例如QA,STAGING和PROD。 这三个数据库的数据库连接字符串都不同。 因此,有两种方法可以设置数据库的配置。
- 更改将在其中部署应用程序的环境的代码中的配置。(重复过程,每次更改应用程序的数据库服务器时都必须更改配置)
- 在每种环境的属性文件中并根据需要使用的数据库保留单独的配置,以获取配置。 即,为了更好地了解config_qa.properties,config_staging.properties,config_production.properties之类的文件,每个文件分别包含qa,登台和生产数据库服务器的数据库配置。
如果使用第二点,则无需在每次将代码部署到新的数据库环境时都更改代码中的属性。 这为我们提供了灵活性,甚至可以在不编译代码的情况下对配置进行更改。