Spring的中央配置文件

问题描述 投票:0回答:1

我正在使用带有SpringBoot 2.1的Java 11构建一个软件系统。我正在考虑配置选项,但到目前为止我发现的所有Spring实现配置的方法都转向其他方向。所以这就是我想要/需要的:

  1. 首先,我将有一些硬编码配置值。它们不应该通过在运行时加载的配置文件进行调整。 示例:应用程序名称。
  2. 其次,我想要一个配置值的(内部)属性文件。这些(大部分)仅由开发人员编辑,因此在启动应用程序时将作为标准值。 示例:应用程序版本。
  3. 最后,在运行时使用某些UI时,用户应该可以编辑一些配置值。 示例:应用程序端口

现在,我想有一个中央配置文件,想想Singleton模式,它管理上面列出的所有三个类别的配置值。我的想法是,我可以轻松访问应用程序中的所有内容。

理想情况下,我有一个带有中心函数的单例类,它接受一个config参数并返回相应的值。

class MyConfig {
    private static singleton = null;
    private MyConfig() {}

    // needed: some name-value storage management for params
    // e.g.: some hardcoded values plus one or more linked property files.

    public static String getProperty(String paramName)
        // fetch parameter and return it
    }

    public static String getProperty(String paramName, String returnType)
        // fetch parameter and return it cast to the specified returnType
    }

    public static String setProperty(String paramName, String value)
        // persist property value to file
    }
}

启动应用程序时,配置基本上应该这样做

  1. 将硬编码值加载到config对象中(如果未在config类本身中指定)
  2. 从属性文件加载值。 必须检查加载的值的有效性(例如,app_port是整数[1,65535])。 属性文件中的值必须预先注册,因此对属性文件具有写访问权限的用户不能通过添加来添加新的配置参数。 属性文件中的值不得覆盖硬编码值。

当用户在运行时编辑配置时,需要将相应的值写回属性文件(或者存储它们的位置)

不幸的是,我没有找到这样的东西,我不知道如何让Java Properties和/或Spring Properties / Configurations实现这样的东西。

有谁可以指出我正确的方向或提供一个最小的工作示例?

java spring properties configuration
1个回答
0
投票

您可以将属性从MyConfig类构造函数中的属性文件加载到Immutable Map中。使此不可变映射成为类级别属性,以便您可以使用此属性访问所有属性。

class MyConfig {
    public static Map<String, String> immutableMap = null;
    private MyConfig() {
          Map<String,String> modifieableMap = new HashMap<>();
          //code to load properties into modifieableMap
          immutableMap = ImmutableMap.copyOf(mutableMap);
    }

    // needed: some name-value storage management for params
    // e.g.: some hardcoded values plus one or more linked property files.

    public static String getProperty(String paramName)
        // fetch parameter and return it
    }

    public static String getProperty(String paramName, String returnType)
        // fetch parameter and return it cast to the specified returnType
    }

    public static String setProperty(String paramName, String value)
        // persist property value to file
    }
}

如果用户尝试从Immutable Map添加或删除任何属性,编译器将抛出UnsupportedOperationException异常

© www.soinside.com 2019 - 2024. All rights reserved.