Java Spring表达式语言-如果设置了配置文件,则设置不同的值

Java Spring表达式语言-如果设置了配置文件,则设置不同的值,java,spring,spring-el,spring-profiles,Java,Spring,Spring El,Spring Profiles,我有一门课是这样的: public AbstractConfig() { super(DataConfig.MGR_NAME); } 在DataConfig内部有: public final String MGR_NAME = "theManager"; 我发现SpEL文档令人困惑。如果设置了弹簧轮廓,是否有办法更改值?也就是说,如果我有配置文件“AlternateManager”,请使用manageralt,否则默认为manager 虽然我编写了这个符号来获得一个活动的概要

我有一门课是这样的:

public AbstractConfig() {
    super(DataConfig.MGR_NAME);
}
DataConfig
内部有:

    public final String MGR_NAME = "theManager";
我发现SpEL文档令人困惑。如果设置了弹簧轮廓,是否有办法更改值?也就是说,如果我有配置文件“AlternateManager”,请使用
manageralt
,否则默认为
manager

虽然我编写了这个符号来获得一个活动的概要文件,但我希望存在一些如下语法来实现这一点:

    @Value("#PROFILE['AlternateManager'] ? 'theManagerAlt' : 'theManager' ")
    public final String MGR_NAME;

如果设置了AlternateManager,则使用它,否则使用管理器(默认)


如果AbstractConfig是一个Springbean,那么您可以编写一个配置类,根据“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
,但我可以接受

对于我来说,这似乎是一个耻辱,因为没有很好的记录。
这张旧票:把我和一个给我答案的老问题联系起来

这张罚单本质上是要求提供更好的文档。

在我看来,每个人都应该为这张6年期的公开票投票。

如果不清楚的话,我想是我编造的“个人资料”符号——我在文档中找不到它。我尝试了你建议的语法,但当试图处理“PROFILE”时,它崩溃了,请参考。5.使用SpELYes,说明如何从已设置的任何系统属性中获取值。我的问题是,您能否在SpEL表达式中将Spring配置文件的设置用作布尔值(即,给定的配置文件是否“活动”)。我不知道如何…根据您的尝试,我建议查看@ConditionalOnProperty或@ConditionalOnExpression或定义自定义条件来设置属性。给您奖金是因为我不想浪费它-否则它将过期!你的回答为我指明了更好的方向,我认为这有助于我最终找到答案!很高兴知道我能帮助你。谢谢你的赏金!
@Value("#{environment.acceptsProfiles('AlternateManager') ? 'theManagerAlt' : 'theManager' }")