如何在Spring应用程序中读取系统环境变量上下文

2022-08-31 08:58:39

如何在应用程序上下文中读取系统环境变量?

我想要这样的东西:

<util:properties id="dbProperties"
        location="classpath:config_DEV/db.properties" />

<util:properties id="dbProperties"
        location="classpath:config_QA/db.properties" />

取决于环境。

我可以在应用程序上下文中使用类似的东西吗?

<util:properties id="dbProperties"
        location="classpath:config_${systemProperties.env}/db.properties" />

其中,实际值是根据系统环境变量设置的

我使用的是 Spring 3.0


答案 1

你很接近:o)Spring 3.0添加了Spring Expression Language。您可以使用

<util:properties id="dbProperties" 
    location="classpath:config_#{systemProperties['env']}/db.properties" />

结合应该解决您的问题。java ... -Denv=QA

另请注意@yiling的评论:

为了访问系统环境变量,即AMOE评论的操作系统级变量,我们可以简单地在该EL中使用“systemEnvironment”而不是“systemProperties”。喜欢#{systemEnvironment['ENV_VARIABLE_NAME']}


答案 2

如今你可以把

@Autowired
private Environment environment;

,然后通过类访问属性:@Component@BeanEnvironment

environment.getProperty("myProp");

对于@Bean

@Value("${my.another.property:123}") // value after ':' is the default
Integer property;

另一种方式是方便的豆子:@ConfigurationProperties

@ConfigurationProperties(prefix="my.properties.prefix")
public class MyProperties {
  // value from my.properties.prefix.myProperty will be bound to this variable
  String myProperty;

  // and this will even throw a startup exception if the property is not found
  @javax.validation.constraints.NotNull
  String myRequiredProperty;

  //getters
}

@Component
public class MyOtherBean {
  @Autowired
  MyProperties myProperties;
}

注意:请记住在设置新的环境变量后重新启动日食


推荐