春季表达语言-如果设置了配置文件,则设置不同的值

时间:2018-10-15 16:04:47

标签: java spring spring-el spring-profiles

我有一个这样的班级:

public AbstractConfig() {
    super(DataConfig.MGR_NAME);
}

DataConfig里面有:

    public final String MGR_NAME = "theManager";

我发现SpEL文档令人困惑。如果设置了弹簧配置文件,是否可以更改值?也就是说,如果我的配置文件为“ AlternateManager”,请使用theManagerAlt,否则默认使用theManager

虽然我用这种符号来获得有效的配置文件,但我希望下面有一些语法可以使这项工作有效:

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

3 个答案:

答案 0 :(得分:4)

答案:

经过大量的搜索和游玩,终于找到了它。希望这对其他人有用!这有效:

@Value("#{environment.acceptsProfiles('AlternateManager') ? 'theManagerAlt' : 'theManager' }")

String不能是final,但我可以接受。

对我来说很可惜,这没有得到很好的记录。
这张旧票:https://jira.spring.io/browse/SPR-9037将我链接到一个旧的SO问题,该问题给了我答案。

该票证实质上是要求提供更好文档的请求。
IMO,每个人都应该为那张6岁的OPEN票买票。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

如果AbstractConfig是Spring Bean,则可以编写一个Configuration类,在其中使用“ 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");
  }
}