【问题标题】:Use of System properties and what is use of System properties系统属性的使用以及系统属性的用途
【发布时间】:2015-07-23 08:23:08
【问题描述】:

我看过代码:

public static final boolean SUPRESS_CHECK = "true".equals(System.getProperty("sdp.authz.disable", "false"));
  1. 这个属性有什么用途?
  2. 为什么我们必须使用系统属性设置和获取?
  3. 我们应该在什么时候使用系统属性。

【问题讨论】:

    标签: java properties system system-properties


    【解决方案1】:

    这些系统属性是 JVM 范围的参数。如果我以您的示例为例,您可以在启动 VM 时传递它们: java -Dsdp.authz.disable=true -jar yourJar.jar

    sdp.authz.disable 的默认值为 false,除非您将此参数传递给 true

    这允许您使用相同的代码,但根据上下文(如开发或生产)更改应用的行为

    【讨论】:

      【解决方案2】:
      1. java.lang.System.getProperties() 方法确定当前系统属性。 getProperty(String) 方法使用的当前系统属性集作为 Properties 对象返回

      2. 如果当前没有一组系统属性,则首先创建并初始化一组系统属性。

      例子:

            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 文档,系统属性被广泛用于维护应用程序的配置。我们可以使用这个属性来改变应用程序在运行时的行为。

        更多信息请参考以下链接:https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html

        系统属性的使用:

        假设我们为我们的应用程序提供了不同的数据库服务器,例如 QA、STAGING 和 PROD。所有这三个数据库的数据库连接字符串都不同。所以,有两种方法可以设置数据库的配置。

        1. 更改应用程序部署环境的代码配置。(迭代过程,每次更改应用程序的数据库服务器时都必须更改配置)
        2. 在每个环境的属性文件中保留单独的配置,并根据需要使用的数据库获取配置。 即更好地理解像 config_qa.properties、config_staging.properties、config_production.properties 这样的文件 每个文件分别包含 qa、暂存和生产数据库服务器的数据库配置。

        如果我们使用第二点,我们将不需要在每次将代码部署到新的数据库环境时更改代码中的属性。这为我们提供了灵活性,甚至可以在不编译代码的情况下对配置进行更改。

        【讨论】:

          猜你喜欢
          • 2015-08-17
          • 1970-01-01
          • 2013-12-22
          • 2011-02-16
          • 1970-01-01
          • 1970-01-01
          • 2014-02-04
          • 2015-06-14
          • 1970-01-01
          相关资源
          最近更新 更多