我在这里遇到了一些困难。我正在设计一个实用程序,我要求我的Spring上下文能够将命令行参数视为属性。这很容易做到:
if (args != null && args.length > 0) {
PropertySource<?> ps = new SimpleCommandLinePropertySource(args);
ctx.getEnvironment().getPropertySources().addFirst(ps);
}
我遇到的问题是下一步:要符合我的企业框架,我必须设置PropertyPlaceholderConfigurer
他们提供 1 。也很容易做到。
@Bean
public PropertyPlaceholderConfigurer propertyPlaceholderConfigurer() {
return new MyPropertyPlaceholderConfigurer();
}
问题是,一旦设置了后者,之前使用命令行的是什么,我有错误:
java.lang.IllegalArgumentException:无法解析占位符&#39; input.file&#39;在字符串值&#34; $ {input.file}&#34;
现在,我知道使用两者远非理想(理想情况下,我甚至不应该使用PropertyPlaceholderConfigurer
而是使用PropertySourcesPlaceholderConfigurer
)。然而,我对配置器没有选择。
因此,我认为我必须用我的PropertySource
改变一些东西,但我不知道如何以优雅的方式做到这一点。我应该延长PropertyPlaceholderConfigurer
以添加PropertySource
吗?这甚至可能吗?
在这种情况下,最佳解决方案是什么?即使是模糊的线索也是受欢迎的,因为我不知道要走哪条路。
(春季版:4.1.6)
<子> 1。这个PropertyPlaceholderConfigurer
加载一些属性文件并应用一些额外的处理(例如,允许在属性文件中加密值)。
答案 0 :(得分:0)
使用
ctx.getEnvironment().getPropertySources().addFirst(ps);
你走得正确。
我认为您的MyPropertyPlaceholderConfigurer
(来自该企业框架)不仅与PropertySourcesPlaceholderConfigurer
兼容。
您应该查看他们的代码并覆盖它以扩展PropertySourcesPlaceholderConfigurer
。
从另一边PlaceholderConfigurerSupport
是BeanFactoryPostProcessor
,这些人必须配置为静态 @Bean
。
HTH