gpt4 book ai didi

java - 在 Spring Framework 中使用 SPeL 读取系统属性

转载 作者:搜寻专家 更新时间:2023-11-01 03:04:06 25 4
gpt4 key购买 nike

我需要在我的一个配置文件中获取以下系统属性:-Dspring.profiles.active="development"。现在我看到无数人建议这可以用 Spring 表达式语言来完成,但我无法让它工作。这是我尝试过的方法(加上其中的许多变体)。

@Configuration
@ComponentScan(basePackages = { ... })
public class AppConfig {
@Autowired
private Environment environment;

@Value("${spring.profiles.active}")
private String activeProfileOne;

@Value("#{systemProperties['spring.profiles.active']}")
private String activeProfileTwo;

@Bean
public PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
Resource[] resources = {
new ClassPathResource("application.properties"),
new ClassPathResource("database.properties")

// I want to use the active profile in the above file names
};

PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
propertySourcesPlaceholderConfigurer.setLocations(resources);
propertySourcesPlaceholderConfigurer.setIgnoreUnresolvablePlaceholders(true);

return propertySourcesPlaceholderConfigurer;
}
}

所有属性都是NULL。如果我尝试访问任何其他系统属性,也会发生同样的情况。我可以通过调用 System.getProperty("spring.profiles.active") 毫无问题地访问它们,但这不是很好。

我发现的许多示例都将 PropertySourcesPlaceholderConfigurer 配置为还搜索系统属性,所以这可能就是它不起作用的原因。但是,这些示例在 Spring 3 和 XML 配置中,设置了类中不再存在的属性。也许我必须调用 setPropertySources 方法,但我不完全确定如何配置它。

无论哪种方式,我都找到了多个示例,表明我的方法应该有效。相信我,我四处搜索了很多。怎么了?

最佳答案

只需 Autowiring Spring 的 Environment interface 的一个实例,就像你实际做的那样,然后询问 Activity 环境是什么:

@Configuration
public class AppConfig {

@Autowired
private Environment environment;

@Bean
public PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {

List<String> envs = Arrays.asList(this.environment.getActiveProfiles());
if (envs.contains("DEV")) {
// return dev properties
} else if (envs.contains("PROD")) {
// return prod properties
}
// return default properties
}
}

关于java - 在 Spring Framework 中使用 SPeL 读取系统属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28796700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com