同时使用 PropertyPlaceholderConfigurer 和 PropertySource
Using both PropertyPlaceholderConfigurer and PropertySource
我在这里有点困难。我正在设计一个实用程序,我需要我的 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: Could not resolve placeholder 'input.file' in string value "${input.file}"
现在,我知道同时使用两者远非理想(理想情况下,我什至不应该使用 PropertyPlaceholderConfigurer
,而是 PropertySourcesPlaceholderConfigurer
)。然而,对于配置器,我别无选择。
因此,我想我必须用我的 PropertySource
改变一些东西,但我不知道如何以优雅的方式做到这一点。我应该扩展 PropertyPlaceholderConfigurer
以添加 PropertySource
吗?这可能吗?
在这种情况下,最好的解决方案是什么?即使是模糊的线索也是受欢迎的,因为我不知道该走哪条路。
(Spring 版本: 4.1.6)
1.这 PropertyPlaceholderConfigurer
加载一些属性文件并应用一些额外的处理(例如允许属性文件中的加密值)。
随着
ctx.getEnvironment().getPropertySources().addFirst(ps);
你走对了。
我认为您的 MyPropertyPlaceholderConfigurer
(来自该企业框架)不仅与 PropertySourcesPlaceholderConfigurer
兼容。
您应该查看他们的代码并覆盖它以扩展 PropertySourcesPlaceholderConfigurer
。
从另一边 PlaceholderConfigurerSupport
是 BeanFactoryPostProcessor
并且这些家伙必须配置为 static @Bean
s.
HTH
我在这里有点困难。我正在设计一个实用程序,我需要我的 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: Could not resolve placeholder 'input.file' in string value "${input.file}"
现在,我知道同时使用两者远非理想(理想情况下,我什至不应该使用 PropertyPlaceholderConfigurer
,而是 PropertySourcesPlaceholderConfigurer
)。然而,对于配置器,我别无选择。
因此,我想我必须用我的 PropertySource
改变一些东西,但我不知道如何以优雅的方式做到这一点。我应该扩展 PropertyPlaceholderConfigurer
以添加 PropertySource
吗?这可能吗?
在这种情况下,最好的解决方案是什么?即使是模糊的线索也是受欢迎的,因为我不知道该走哪条路。
(Spring 版本: 4.1.6)
1.这 PropertyPlaceholderConfigurer
加载一些属性文件并应用一些额外的处理(例如允许属性文件中的加密值)。
随着
ctx.getEnvironment().getPropertySources().addFirst(ps);
你走对了。
我认为您的 MyPropertyPlaceholderConfigurer
(来自该企业框架)不仅与 PropertySourcesPlaceholderConfigurer
兼容。
您应该查看他们的代码并覆盖它以扩展 PropertySourcesPlaceholderConfigurer
。
从另一边 PlaceholderConfigurerSupport
是 BeanFactoryPostProcessor
并且这些家伙必须配置为 static @Bean
s.
HTH