복붙노트

[SPRING] 봄 부팅 @Value 속성

SPRING

봄 부팅 @Value 속성

스프링 부트 응용 프로그램이 있고 클래스 중 하나에서 @Value를 사용하여 application.properties 파일에서 속성을 참조하려고합니다. 그러나 재산은 해결되지 않습니다. 유사한 게시물을 살펴본 후 제안에 따라 시도했지만 도움이되지 않았습니다. 수업은 다음과 같습니다 :

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class PrintProperty {

  @Value("${file.directory}")
  private String fileDirectory;

  public void print() {
    System.out.println(fileDirectory);
  }
}

application.properties에 file.directory 속성이 있습니다. 다른 분야도 있습니다.

해결법

  1. ==============================

    1.나는 너와 같은 문제가 있었다. 여기에 내 오류 코드가있다.

    나는 너와 같은 문제가 있었다. 여기에 내 오류 코드가있다.

    @Component
    public class GetExprsAndEnvId {
        @Value("hello")
        private String Mysecret;
    
    
        public GetExprsAndEnvId() {
            System.out.println("construct");
        }
    
    
        public void print(){
            System.out.println(this.Mysecret);
        }
    
    
        public String getMysecret() {
            return Mysecret;
        }
    
        public void setMysecret(String mysecret) {
            Mysecret = mysecret;
        }
    }
    

    이것은 문제가되지 않지만 우리는 이것을 다음과 같이 사용할 필요가있다.

    @Autowired
    private GetExprsAndEnvId getExprsAndEnvId;
    

    이건 아니야:

    getExprsAndEnvId = new GetExprsAndEnvId();
    
  2. ==============================

    2.application.properties 파일이 src / main / resources / application.properties 아래에 있는지 확인하십시오. 한 가지 방법이 있습니다. 다음과 같이 @PostConstruct를 추가하십시오.

    application.properties 파일이 src / main / resources / application.properties 아래에 있는지 확인하십시오. 한 가지 방법이 있습니다. 다음과 같이 @PostConstruct를 추가하십시오.

    샘플 Application.properties

    file.directory = somePlaceOverHere
    

    샘플 Java 클래스

    @ComponentScan
    public class PrintProperty {
    
      @Value("${file.directory}")
      private String fileDirectory;
    
      @PostConstruct
      public void print() {
        System.out.println(fileDirectory);
      }
    }
    

    위의 코드는 "somePlaceOverhere"를 출력합니다.

  3. ==============================

    3.언급 할 것이 있습니다. 스프링 부트 버전 1.4.0을 사용했고이 버전 이후로는 다음과 같이 작성할 수 있습니다.

    언급 할 것이 있습니다. 스프링 부트 버전 1.4.0을 사용했고이 버전 이후로는 다음과 같이 작성할 수 있습니다.

    @Component
    public class MongoConnection {
    
    @Value("${spring.data.mongodb.host}")
    private String mongoHost;
    
    @Value("${spring.data.mongodb.port}")
    private int mongoPort;
    
    @Value("${spring.data.mongodb.database}")
    private String mongoDB;
    }
    

    언제든지 수업을 들으십시오.

  4. ==============================

    4.application.properties에서 값을 읽으려면 기본 클래스에 @SpringBootApplication이라는 주석을 달고 @Component 또는 다양한 클래스로 읽는 클래스에 주석을 달기 만하면됩니다. 아래 예제에서는 application.properties에서 값을 읽었으며 웹 서비스가 호출 될 때 제대로 작동합니다. 동일한 코드를 그대로 배포하고 http : // localhost : 8080 / hello에서 액세스하려고하면 키 메시지에 대해 application.properties에 저장 한 값을 가져옵니다.

    application.properties에서 값을 읽으려면 기본 클래스에 @SpringBootApplication이라는 주석을 달고 @Component 또는 다양한 클래스로 읽는 클래스에 주석을 달기 만하면됩니다. 아래 예제에서는 application.properties에서 값을 읽었으며 웹 서비스가 호출 될 때 제대로 작동합니다. 동일한 코드를 그대로 배포하고 http : // localhost : 8080 / hello에서 액세스하려고하면 키 메시지에 대해 application.properties에 저장 한 값을 가져옵니다.

    package com.example;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @SpringBootApplication
    @RestController
    public class DemoApplication {
    
        @Value("${message}")
        private String message;
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    
        @RequestMapping("/hello")
        String home() {
            return message;
        }
    
    }
    

    시도해보고 알려줘.

  5. ==============================

    5.스프링 부트를 사용하고 있기 때문에 @PropertySource 주석을 추가하지 않아 현재 작동하지 않는 유일한 방법이라고 생각합니다.

    스프링 부트를 사용하고 있기 때문에 @PropertySource 주석을 추가하지 않아 현재 작동하지 않는 유일한 방법이라고 생각합니다.

    그것을 시도하고 귀하의 의견을 알려주십시오. 감사!

    @Configuration
    @ComponentScan
    @PropertySource("classpath:/application.properties")
    @EnableAutoConfiguration
    public class PrintProperty {
    
      @Value("${file.directory}")
      private String fileDirectory;
    
      public void print() {
        System.out.println(fileDirectory);
      }
    }
    
  6. ==============================

    6.OP에 패키지 선언을 포함시키지 않았지만 @SpringBootApplication이나 @ComponentScan이 @Component를 스캔하지 않을 수도 있습니다.

    OP에 패키지 선언을 포함시키지 않았지만 @SpringBootApplication이나 @ComponentScan이 @Component를 스캔하지 않을 수도 있습니다.

    @ComponentScan Javadoc의 설명은 다음과 같습니다.

    ISTR은 이전에 많은 시간을 낭비했고 내 응용 프로그램 클래스를 내 응용 프로그램 패키지 트리에서 가장 높은 패키지로 옮기는 것이 가장 쉽다는 것을 알았습니다.

    최근에 값 삽입이 완료되기 전에 속성이 읽히는 문제가 발생했습니다. Jesse의 대답은 @PostConstruct가 삽입 된 값을 읽을 수있는 가장 초기 인 것으로 보이며, 물론 Spring이이를 호출하도록해야합니다.

  7. ==============================

    7.문제는 구성에 정적 PropertySourcesPlaceholderConfigurer Bean 정의가 필요하다는 것입니다. 나는 비 정적 인 것을 가지고 있고 그것이 작동하지 않았기 때문에 강조로 정적이라고 말합니다.

    문제는 구성에 정적 PropertySourcesPlaceholderConfigurer Bean 정의가 필요하다는 것입니다. 나는 비 정적 인 것을 가지고 있고 그것이 작동하지 않았기 때문에 강조로 정적이라고 말합니다.

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }
    
  8. ==============================

    8.비슷한 문제가 있었고 위의 예는 속성을 읽는 데 도움이되지 않습니다. 아래 링크에서 SpringBoot 응용 프로그램의 application.properties 파일에서 속성 값을 읽는 데 도움이 될 완전한 클래스를 게시했습니다.

    비슷한 문제가 있었고 위의 예는 속성을 읽는 데 도움이되지 않습니다. 아래 링크에서 SpringBoot 응용 프로그램의 application.properties 파일에서 속성 값을 읽는 데 도움이 될 완전한 클래스를 게시했습니다.

    스프링 부트 - 환경 @Autowired가 NullPointerException을 발생시킵니다.

  9. from https://stackoverflow.com/questions/39047333/spring-boot-value-properties by cc-by-sa and MIT license