Как динамически внедрить значения свойств из файла конфигурации в аннотации Hystrix - PullRequest
0 голосов
/ 25 февраля 2019

Сейчас я изучаю Spring Cloud.

Мы знаем, что если файл удаленной конфигурации обновляется, с помощью доступа к «localhost: 10000 / refresh» мы можем динамически получать значения пользовательских свойств удаленногофайл конфигурации на сервере конфигурации.Я хотел бы спросить, как мне динамически внедрить эти значения в аннотации Hystrix.

Мой удаленный файл конфигурации «licenseservice.yml», я поместил его в репозиторий git:

example.propertyЯ по умолчанию.Я из git.

example.timeoutInMilliseconds: 12000

сервер: порт: 10000

eureka: экземпляр: предпочитаемый-ip-адрес: true ...

Java-класс, который я использовал для получения значений в файле конфигурации:

@Component
@RefreshScope
public class ServiceConfig {

    @Value("${example.property}")
    private String exampleProperty;

    @Value("${example.timeoutInMilliseconds}")
    private String timeoutInMilliseconds;

    public String getExampleProperty() {
        return exampleProperty;
    }
    public String getTimeoutInMilliseconds(){
        return timeoutInMilliseconds;
    }
}

Java-метод, который использует аннотации Hystrix:

    @HystrixCommand(fallbackMethod = "buildFallbackLicenseList",
    threadPoolKey = "licenseByOrgThreadPool",
    threadPoolProperties = {
            @HystrixProperty(name = "coreSize",value = "30"),
            @HystrixProperty(name = "maxQueueSize", value = "10")
    },
    commandProperties = {
            @HystrixProperty(name = 
"circuitBreaker.requestVolumeThreshold",value = "10"),
            @HystrixProperty(name = 
"circuitBreaker.errorThresholdPercentage",value = "75"),
            @HystrixProperty(name = 
"circuitBreaker.sleepWindowInMilliseconds",value = "7000"),
            @HystrixProperty(name = 
"metrics.rollingStats.timeInMilliseconds",value = "15000"),
            @HystrixProperty(name = 
"metrics.rollingStats.numBuckets",value = "5"),
            @HystrixProperty(name = 
"execution.isolation.thread.timeoutInMilliseconds",value = ???)
    })
    public List<License> getLicensesByOrg(String organizationId){
        System.out.println("SERVICE CONFIG TEST 
"+serviceConfig.getExampleProperty());
        System.out.println("SERVICE CONFIG TEST 
"+serviceConfig.getTimeoutInMilliseconds());
        randomlyRunLong();
        return licenseRepository.findByOrganizationId(organizationId);
    }

Моя проблема в том, что яхотите динамически изменить значение переменной «execute.isolation.thread.timeoutInMilliseconds» (используя значение «example.timeoutInMilliseconds» в файле .yml).Вы видите, что я написал три знака вопроса в этом месте, потому что я не знаю, что написать, может кто-нибудь, пожалуйста?Скажи мне спасибо.

...