Spring自定义系统属性源不适用于系统环境变量:

时间:2018-07-14 00:21:38

标签: java spring propertyconfigurator

我引入了一种不错的机制(detailed in another one of my SO posts),该机制能够在加载任何Java Bean之前更改系统属性。当我更改systemProperties(-D参数)时,此方法效果很好,但我无法使其与系统环境变量一起使用。机制很简单:环境包含所有PropertySources,其中包含应用程序的变量。我正在从事的项目要求我从属性中的值解析变量。找到原始值后,我可以解析出它应该是什么,并在适当的PropertySource中替换它,以便我的Java Bean将获得所需的值。

由于系统环境变量的属性源的类型为Unmodifiable,因此我不得不使用两个单独的选项(我都选择了两个选项)。我有一个自定义属性源,已将其添加为优先级源列表中的最高优先级: propertySources.addFirst(modifiedSystemEnvironmentvariables)

最重要的是,我想我将替换整个systemEnvironment属性源(因为我无法编辑无法修改的内容):

propertySources.replace("systemEnvironment", modifiedSystemEnvironmentvariables);

应用程序启动时,我所做的所有systemProperty更改都会反映在spring环境变量中,并在我调用System.getProperty()时解决。当我调用System.getenv()时,系统环境变量(或systemEnvironment)无法解析。而是解析原始值。尽管如此,spring Environment变量仍显示了我之前提到的更新值。

要编辑systemEnvironment PropertySource是否需要做一些特殊的事情?是否需要某种刷新?

0 个答案:

没有答案