Как динамически загружать свойства приложения в аннотации @HystrixProperty - PullRequest
0 голосов
/ 29 августа 2018

Метод работы с жестко заданными значениями для @HystricProperty:

@HystrixCommand(ignoreExceptions={HttpClientErrorException.class},
        //groupKey="ProductServiceGroup",commandKey = "test", threadPoolKey = "ProductInfoDetailsThreadPool",
        commandProperties = {
                @HystrixProperty(name=HystrixPropertiesManager.CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS, value="500"),
                @HystrixProperty(name=HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS, value="1500"),
                @HystrixProperty(name=HystrixPropertiesManager.CIRCUIT_BREAKER_ENABLED, value="true"),
                @HystrixProperty(name=HystrixPropertiesManager.CIRCUIT_BREAKER_REQUEST_VOLUME_THRESHOLD, value="20"),
                @HystrixProperty(name=HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_INTERRUPT_ON_TIMEOUT, value="true"),
                @HystrixProperty(name=HystrixPropertiesManager.EXECUTION_ISOLATION_SEMAPHORE_MAX_CONCURRENT_REQUESTS, value="20")
        },
        fallbackMethod = "reliable")
public Map readingList() {
    try {
        Thread.sleep(950);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    URI uri = URI.create("http://localhost:8090/recommended");
    return this.restTemplate.getForObject(uri, Map.class);
}

Я не хочу жестко кодировать эти значения в аннотации @HystrixProperty, вместо этого хочу прочитать эти свойства из application.properties.

что-то вроде этого: @HystrixProperty (name = HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS, значение = "$ {timeout.in.millis}")

1 Ответ

0 голосов
/ 29 августа 2018

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

<context:property-placeholder location="classpath:myapp.properties" /> 

затем создайте файл свойств myapp.properties и вставьте его в путь к классам, как указано в конфигурации. содержание может быть

CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS_VALUE=500
EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS_VALUE=1500

и так далее ...

тогда вы можете использовать эти параметры в вашей @HistrixCommand так же, как вы написали

HystrixCommand(ignoreExceptions={HttpClientErrorException.class},
        //groupKey="ProductServiceGroup",commandKey = "test", threadPoolKey = "ProductInfoDetailsThreadPool",
        commandProperties = {
                @HystrixProperty(name=HystrixPropertiesManager.CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS, value=${CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS_VALUE}),
                @HystrixProperty(name=HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS, value=${EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS_VALUE}),
 ...
...