UriComponentsBuilder не раскрывает свойства @Value - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь составить URL-адрес из файла свойств application.yml, например:

service:
  url: http://localhost:8081/rest/change/age

У меня есть такой планировщик:

@Component
public class AScheduler {

private static final Logger logger = LoggerFactory.getLogger(AScheduler.class);

private String serviceUrl;

private final RestTemplate restTemplate;

HttpHeaders headers = new HttpHeaders();
HttpEntity<?> httpEntity = new HttpEntity<>(headers);

public AScheduler(RestTemplateBuilder restTemplateBuilder,
                     @Value("{service.url}") String serviceUrl) {
    this.restTemplate = restTemplateBuilder.build();
    this.serviceUrl = serviceUrl;
}

 @Scheduled(fixedRate = 30 * 1000)
public void invoke() {
    UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(serviceUrl);
    ResponseEntity<JsonNode> jsonResponse = (ResponseEntity<JsonNode>) getRestResponseFromUriString(builder.toUriString(),
            JsonNode.class);
}

Я продолжаю получатьследующее исключение:

java.lang.IllegalArgumentException: [{service.url}] не является действительным URL-адресом HTTP в org.springframework.web.util.UriComponentsBuilder.fromHttpUrl (UriComponentsBuilder.java:290)~ [spring-web-5.0.9.RELEASE.jar: 5.0.9.RELEASE] на com.salesforce.fire.adcl.scheduler.AScheduler.invoke (AScheduler.java:47) ~ [classes /: na] на солнце.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) ~ [na: 1.8.0_152] в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) ~ [na: 1.8.0_152] в sun.rempell.DelegatingMethodAccessorImpl.java:43) ~ [na: 1.8.0_152] в java.lang.reflect.Method.invoke (Method.java:498) ~ [na: 1.8.0_152] в org.springframework.scheduling.support.ScheduledMethodRunnable.run (ScheduledMethodRunnable.java:84) ~ [spring-context-5.0.9.RELEASE.jar: 5.0.9.RELEASE] в org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run (DelegatingErrorHandlingRunnable.java:54) ~ [spring-context-5.0.9.RELEASE.jar: 5.0.9.RELEASE] вjava.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:511) [na: 1.8.0_152] в java.util.concurrent.FutureTask.runAndReset (FutureTask.java:308) [na: 1.8.0_152] вjava.util.concurrent.0_152] на java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149) [na: 1.8.0_152] на java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:624).0_152] at java.lang.Thread.run (Thread.java:748) [na: 1.8.0_152]

Я пробовал buildAndExpand() и многие другие способы составления UriComponents.Хотя я не могу использовать эту собственность в застройщике.Есть ли способ, которым я могу составить URL-адрес с помощью UrlComponentsBuilder из файла свойств

1 Ответ

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

Вы допустили ошибку в SpEL @Value.Вы должны написать имя свойства в следующем формате: ${property.name}

Поэтому измените

@Value("{service.url}") String serviceUrl 

на

@Value("${service.url}") String serviceUrl
...