динамический признак весной - PullRequest
1 голос
/ 19 марта 2019

мое веб-приложение имеет метод test, который вызывается cronjob каждые две минуты, и мне нравится иметь возможность динамически переключаться между solution a и solution b с каким-либо флагом функций, не развертывая его каждый раз.

@Scheduled(fixedRateService = "120000")
public void test(){
if(conditionA()) {
  // do solution A
  } else {
  // do solution B
  }
} 

Я думал использовать cookie для этой цели, но он работает только в сеансе, который я открыл, и все же другое решение может быть вызвано другими сеансами.

Можно ли как-нибудь принудительно задействовать только одно решение, работающее в производстве, и динамически менять их, не выпуская их каждый раз?

Обновление: Джонатан Джокс ответ правильный, и я добавляю некоторые пояснения здесь

чтобы сначала обновить значение нужных вам свойств до POST вашего ключа / значения в формате x-www-form-urlencoded до \actuator\env, а затем принудительно перезагрузить его, отправив пустую полезную нагрузку в \actuator\refresh

1 Ответ

1 голос
/ 19 марта 2019

вы можете использовать @ RefreshScope для обновления свойств:

1 .- Добавить @RefreshScope для класса

@RefreshScope
@Component
public class Test { 

    @Value("${conditional.istrue}")
    private boolean conditional;

    @Scheduled(fixedRateService = "120000")
    public void test(){
    if(conditional) {
      // do solution A
      } else {
      // do solution B
      }
    }   
}

2 .- Добавить свойство флага и разрешить экспозицию конечной точке /refresh для обновления новых свойств.

application.properties

  conditional.istrue=true
  management.endpoints.web.exposure.include=*

3.- После изменения application.properties, например:

  conditional.istrue=false

Затем вы можете refresh вводить конфигурации, выполняя:

 curl localhost:8080/actuator/refresh -d {} -H "Content-Type: application/json"

ССЫЛКИ - https://spring.io/guides/gs/centralized-configuration/

...