Spring 表达式语言 - 如果设置了配置文件,则设置不同的值
Spring Expression Language - set different value if Profile is set
我有一个 class 这样的:
public AbstractConfig() {
super(DataConfig.MGR_NAME);
}
里面DataConfig
有:
public final String MGR_NAME = "theManager";
我发现 SpEL 文档令人困惑。如果设置了 Spring 配置文件,有没有办法更改值?也就是说,如果我有配置文件 "AlternateManager" 使用 theManagerAlt
,但默认为 theManager
否则?
虽然我编造了这个符号来获得一个活动的配置文件,但我希望存在像下面这样的一些语法来完成这项工作:
@Value("#PROFILE['AlternateManager'] ? 'theManagerAlt' : 'theManager' ")
public final String MGR_NAME;
如果设置了 AlternateManager,则使用它,否则使用管理器(默认)
@Value("#{PROFILE['AlternateManager'] ?: 'theManager' }")
public final String MGR_NAME;
如果 AbstractConfig 是一个 Spring bean,您可以编写一个配置 class,根据您的 'AlternateManager' 配置文件是否处于活动状态,在其中使用预期参数初始化 bean :
@Configuration
public class ExampleConfiguration {
// If AlternateManager profile is enabled, Spring Bean will be initialized with "theManagerAlt"
@Bean
@Profile("AlternateManager")
public AbstractConfig getDevDataSource() {
return new AbstractConfig("theManagerAlt");
}
// if AlternateManager profile is not enabled, Spring Bean will be initialized with "theManager"
@Bean
@Profile("!AlternateManager")
public AbstractConfig getProdDataSource() {
return new AbstractConfig("theManager");
}
}
答案:
经过大量谷歌搜索和尝试,终于找到了。希望这对其他人有用!这有效:
@Value("#{environment.acceptsProfiles('AlternateManager') ? 'theManagerAlt' : 'theManager' }")
String
不能是 final
,但我可以接受。
我觉得这没有很好的记录,这让我感到很遗憾。
这张旧票:https://jira.spring.io/browse/SPR-9037 将我链接到一个旧的 SO 问题,它给了我答案。
该票证本质上是要求提供更好的文档。
IMO,每个人都应该投票给那张 6 岁的公开票。
我有一个 class 这样的:
public AbstractConfig() {
super(DataConfig.MGR_NAME);
}
里面DataConfig
有:
public final String MGR_NAME = "theManager";
我发现 SpEL 文档令人困惑。如果设置了 Spring 配置文件,有没有办法更改值?也就是说,如果我有配置文件 "AlternateManager" 使用 theManagerAlt
,但默认为 theManager
否则?
虽然我编造了这个符号来获得一个活动的配置文件,但我希望存在像下面这样的一些语法来完成这项工作:
@Value("#PROFILE['AlternateManager'] ? 'theManagerAlt' : 'theManager' ")
public final String MGR_NAME;
如果设置了 AlternateManager,则使用它,否则使用管理器(默认)
@Value("#{PROFILE['AlternateManager'] ?: 'theManager' }")
public final String MGR_NAME;
如果 AbstractConfig 是一个 Spring bean,您可以编写一个配置 class,根据您的 'AlternateManager' 配置文件是否处于活动状态,在其中使用预期参数初始化 bean :
@Configuration
public class ExampleConfiguration {
// If AlternateManager profile is enabled, Spring Bean will be initialized with "theManagerAlt"
@Bean
@Profile("AlternateManager")
public AbstractConfig getDevDataSource() {
return new AbstractConfig("theManagerAlt");
}
// if AlternateManager profile is not enabled, Spring Bean will be initialized with "theManager"
@Bean
@Profile("!AlternateManager")
public AbstractConfig getProdDataSource() {
return new AbstractConfig("theManager");
}
}
答案:
经过大量谷歌搜索和尝试,终于找到了。希望这对其他人有用!这有效:
@Value("#{environment.acceptsProfiles('AlternateManager') ? 'theManagerAlt' : 'theManager' }")
String
不能是 final
,但我可以接受。
我觉得这没有很好的记录,这让我感到很遗憾。
这张旧票:https://jira.spring.io/browse/SPR-9037 将我链接到一个旧的 SO 问题,它给了我答案。
该票证本质上是要求提供更好的文档。
IMO,每个人都应该投票给那张 6 岁的公开票。