当前位置: 首页 > 知识库问答 >
问题:

在使用@value注释的Spring Boot中无法从属性文件中读取值

冷吉星
2023-03-14
helloWorldUrl = null
Exception in thread "main" java.lang.IllegalArgumentException: URI must not be null
    at org.springframework.util.Assert.notNull(Assert.java:115)
    at org.springframework.web.util.UriComponentsBuilder.fromUriString(UriComponentsBuilder.java:189)
    at org.springframework.web.util.DefaultUriTemplateHandler.initUriComponentsBuilder(DefaultUriTemplateHandler.java:114)
    at org.springframework.web.util.DefaultUriTemplateHandler.expandInternal(DefaultUriTemplateHandler.java:103)
    at org.springframework.web.util.AbstractUriTemplateHandler.expand(AbstractUriTemplateHandler.java:106)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:612)
    at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:287)
    at com.example.HelloWorldClient.main(HelloWorldClient.java:19)
public class HelloWorldClient {

    @Value("${rest.uri}")
    private static String helloWorldUrl;

    public static void main(String[] args) {
        System.out.println("helloWorldUrl = " + helloWorldUrl);
        String message = new RestTemplate().getForObject(helloWorldUrl, String.class);
        System.out.println("message = " + message);
    }

}

Application.Properties

rest.uri=http://localhost:8080/hello

共有1个答案

幸鸿轩
2023-03-14

您的代码中有几个问题。

>

  • 从你发布的样本来看,Spring似乎还没有开始。main类应该运行main方法中的上下文。

    @SpringBootApplication
    public class HelloWorldApp {
    
         public static void main(String[] args) {
              SpringApplication.run(HelloWorldApp.class, args);
         }
    
    }
    

    不可能将值注入到静态字段中。您应该从将其更改为常规类字段开始。

    @Component
    public class HelloWorldClient {
        // ...
    }
    
    @SpringBootApplication
    public class HelloWorldApp {
    
      // ...    
    
      @Bean
      public HelloWorldClient helloWorldClient() {
         return new HelloWorldClient();
      }
    
    }
    

  •  类似资料: