Spring Expression Language - установить другое значение, если установлен профиль - PullRequest
0 голосов
/ 15 октября 2018

У меня есть такой класс:

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;

Ответы [ 3 ]

0 голосов
/ 17 октября 2018

Если AbstractConfig является bean-компонентом Spring, вы можете написать класс Configuration, в котором вы инициализируете bean-компонент ожидаемым параметром в зависимости от того, активен ваш профиль 'AlternateManager':

@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");
  }
}
0 голосов
/ 19 октября 2018

ОТВЕТ:

После долгих поисков и поисков, наконец-то нашел его.Надеюсь, это будет полезно для других!Это работает:

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

String не может быть final, но я могу жить с этим.

Мне стыдно, что это плохо документировано.
Этот старый билет: https://jira.spring.io/browse/SPR-9037 связал меня со старым SO вопросом, который дал мне ответ.

Этот билет по сути является запросом на лучшую документацию.
ИМО, каждый должен проголосовать за этот ОТКРЫТЫЙ 6-летний билет.

0 голосов
/ 15 октября 2018

Если установлен AlternateManager, используйте его, иначе используйте менеджер (по умолчанию)

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