@ServiceActivator Как читать inputChannel из файла свойств при весенней загрузке? - PullRequest
0 голосов
/ 09 января 2020

я разрабатываю потребитель google pubsub, и когда я использую фиксированное значение "my-alpha-pubsub-topi c", он полностью запущен

@ServiceActivator(inputChannel = "my-alpha-pubsub-topic" )
 public void messageReceiver(String payload) {
  LOGGER.info("Message arrived! Payload: " + payload);

 }

Но я запускаю его на контейнере в Кубернетесе, мне нужно передать inputChannel значение из параметра env в Среде для 1 поддержки построения контейнера несколько сред

Alpha => inputChannel = "my-alpha-pubsub-topic"
Staging => inputChannel = "my-staging-pubsub-topic"
Production => inputChannel = "my-pubsub-topic"

Купить Я не могу передать параметр в inputChannel. его запуск не удался

@Value("${pubsub.name}")
 private String pubsubName;


@ServiceActivator(inputChannel = "${pubsubName}" )
 public void messageReceiver(String payload) {
  LOGGER.info("Message arrived! Payload: " + payload);

 }

, и я попробую это и не удалось

@ServiceActivator(inputChannel = "${pubsubName}" ) 
@ServiceActivator(inputChannel = "#{${pubsubName}}" )
@ServiceActivator(inputChannel = "${pubsub.name}" )

Как я могу передать значение в inputChannel из свойств или параметра env

1 Ответ

1 голос
/ 10 января 2020

Проблема в том, что вы не можете использовать @ServiceActivator(inputChannel = "${pubsub.name}" ), поскольку inputChannel должен указывать спецификатор пружинного компонента, а не переменную среды. Я предполагаю, что где-то в вашем коде у вас есть канал с квалификатором my-alpha-pubsub-topi c, и именно поэтому он работал впервые.

На мой взгляд, было бы более целесообразно создавать все эти бобы с использованием пружинных профилей и иметь что-то вроде следующего для каждой среды

 @Profile("Staging") 
 @ServiceActivator(inputChannel = "my-staging-pubsub-topic" ) 
  public void messageReceiver(String payload) {
  LOGGER.info("Message arrived! Payload: " + payload);
 }
...