我引入了一种不错的机制(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是否需要做一些特殊的事情?是否需要某种刷新?