UriComponentsBuilder 不展开@Value 属性

UriComponentsBuilder does not expand @Value properties

我正在尝试从 属性 文件 application.yml 中编写 Url,如下所示:

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}] is not a valid HTTP URL at org.springframework.web.util.UriComponentsBuilder.fromHttpUrl(UriComponentsBuilder.java:290) ~[spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE] at com.salesforce.fire.adcl.scheduler.AScheduler.invoke(AScheduler.java:47) ~[classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_152] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_152] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_152] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_152] at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) ~[spring-context-5.0.9.RELEASE.jar:5.0.9.RELEASE] at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-5.0.9.RELEASE.jar:5.0.9.RELEASE] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_152] at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [na:1.8.0_152] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_152] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [na:1.8.0_152] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_152] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_152] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_152]

我已经尝试了buildAndExpand()和许多其他组合 UriComponents 的方法。我虽然无法在生成器中使用此 属性。有没有一种方法可以使用 属性 文件

中的 UrlComponentsBuilder 编写 Url

您在 @Value 的 SpEL 中犯了一个错误。您必须按照以下格式编写 属性 名称:${property.name}

所以改变

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

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