【问题标题】:How can I parse a property and inject values back into the Environment?如何解析属性并将值注入回环境?
【发布时间】:2015-03-20 20:12:23
【问题描述】:

我有一个属性,我想对其进行解析并将值注入回环境中。我想使用 @Value 注释使这些值可用。

例如。属性文件或系统属性:

settings.compoundProperty=abc.xyz.123

我想解析并注入

prop1=abc
prop2=xyz
prop3=123

回到环境。我希望能够在我的 bean 中注入这些新属性,如下所示:

@Value("${prop1}") prop1;

@Value("${prop2}") prop2;

我试过了:

@ConfigurationProperties (prefix="settings")
public class EnvironmentProperties {
      @Inject ConfigurableEnvironment env;

      public void setCompoundProperty(String s) {
           // parse s and inject prop1, prop2 and prop3 back using env
      }

但是,只有在我包含

时才有效
@Inject EnvironmentProperties envProps; 

在带有 @Value("${prop1}") prop1; 的类中属性。

如何在不需要包含上述 envProps 的情况下做到这一点?

【问题讨论】:

    标签: spring spring-boot


    【解决方案1】:

    您可以使用 Spring 表达式语言 (SpEL)

    您的所有属性都可以使用Environment 访问,因此在下面的代码中您将访问prop1 并注入value 字符串

    @Value("#{environment.prop1}")
    private String value;
    

    【讨论】:

    • 谢谢!那行得通。我可以像这样访问这些属性:@Value("#{environmentProperties.prop1}") private String value;
    猜你喜欢
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 2011-09-26
    相关资源
    最近更新 更多