当前位置: 首页 > 知识库问答 >
问题:

配置更改而不重新部署

董宜然
2023-03-14

我的web应用程序与外部系统有几个集成,所有这些集成Rest URL都保存在web应用程序中的配置文件中。我的应用程序在启动时读取此配置文件,并在连接到外部系统时使用URL值。但经常发生的情况是,其中一个外部系统关闭,我们必须使用另一个URL。在这种情况下,我们通常必须修改配置并重新部署war文件。有没有一种方法可以在不重新部署war文件的情况下用新值修改配置文件?

共有1个答案

汲灿
2023-03-14

在我的项目中,我通常使用Apache Commons配置来管理配置文件(属性)。该库具有在文件更改时自动重新加载值的功能。

这是我的实施建议:

创建一个类“MyAppConfigProperties”,用于加载属性文件并读取配置密钥:

public class MyAppConfig {

    //Apache Commons library object
    private PropertiesConfiguration configFile;

    private void init() {
        try {
            //Load the file            
            configFile = new PropertiesConfiguration(
                    MyAppConfig.class.getClassLoader().getResource("configFile.properties"));

            // Create refresh strategy with "FileChangedReloadingStrategy"
            FileChangedReloadingStrategy fileChangedReloadingStrategy = new FileChangedReloadingStrategy();
            fileChangedReloadingStrategy.setRefreshDelay(1000);
            configFile.setReloadingStrategy(fileChangedReloadingStrategy);

        } catch (ConfigurationException e) {
            //Manage the exception
        }
    }

    /**
     * Constructor por defecto.
     */
    public MyAppConfig() {
        super();
        init();
    }

    public String getKey(final String key) {

        try {
            if (configFile.containsKey(key)) {
                return configFile.getString(key);
            } else {
                return null;
            }

        } catch (ConversionException e) {
            //Manage Exception
        }
    }
}

现在,您必须构造这个类的一个实例(singleton),并在所有需要配置键的地方使用它。

每次使用方法“getKey”时,您都将获得密钥的最后一个值,而无需部署和重新启动。

 类似资料:
  • 我想更新当前作为Web应用托管在Azure中的应用程序的web.config文件中的数据库连接字符串。 似乎可以将RDP转换为Azure云服务角色,而不是Web应用。如果无法将RDP导入Azure Web应用,是否有其他方法可以在不重新部署的情况下更新连接字符串?

  • 我有一个部署,其中包括一个configMap、persistentVolumeClaim和一个服务。我已经更改了configMap并将部署重新应用到我的集群中。我了解到此更改不会在部署中自动重启pod: 下面是Wiki.yaml的样子:

  • 问题内容: 我目前正在尝试弄清楚如何在不重新加载整个页面的情况下更改路由参数。例如,如果我从 http://www.example.com/#/page 但将名称更新为“乔治”,将路线更改为: http://www.example.com/#/page/george 如果我已经路由了http://www.example.com/#/page/:name。 无需重新加载位置。可以只设置$ route

  • 子域应在codefile中查找但未更改URL的任务。有可能吗? 我尽量 但它肯定会导致URL的变化,但我不需要它。

  • 当jboss(RHEL)中的一些应用程序的属性或. xml被修改时,是否有必要重新启动jboss服务,或者仅仅通过重新部署(mv。部署。谢啦

  • 我在一个应用程序的前端原型上工作,该应用程序具有给定的JS、React和CoreUI4 React技术栈。我来自Python背景,在网络开发和我给定的技术堆栈方面没有太多经验。当我不得不开始使用钩子时,这一点变得很明显。 问题 我真的不明白为什么它不更新我的和/或不渲染。我需要一个条件渲染,我也使用。 我试图: 从我的主应用程序中传递一个更大的状态,一旦我启动条件逻辑(挂钩规则)就无法工作。 当我