>  기사  >  Java  >  SpringBoot의 @Value로 인해 application.properties 구성이 잘못되었습니다. 해결 방법

SpringBoot의 @Value로 인해 application.properties 구성이 잘못되었습니다. 해결 방법

WBOY
WBOY앞으로
2023-05-16 11:52:051426검색

@Value가 application.properties 구성이 잘못된 문제를 가져옵니다

잘못된 이유는 주로 @Value 사용 시 주의 사항에 주의하기 때문입니다.

  • 1 정적 변수에는 사용할 수 없습니다.

  • 2. 상수(최종)에 작용할 수 없습니다.

  • 3. 등록되지 않은 클래스에서는 사용할 수 없습니다(@Component, @Configuration 등을 사용해야 함). 이 속성이 있는 클래스를 사용하면 @ Autowired 메서드만 사용할 수 있으며 새 메서드는 이러한 구성을 자동으로 주입하지 않습니다.

  • 이러한 주의 사항도 원칙에 따라 결정됩니다.

springboot 시작 프로세스에는 다음과 같은 두 가지 중요한 프로세스가 있습니다.

1 컨테이너의 Bean을 스캔하고 구문 분석하여 beanFactory를 올라가는 것은 정보를 등록하는 것과 같습니다.

  • 2. 스캔한 빈을 인스턴스화하고 초기화합니다.

  • @Value는 두 번째 단계에서 구문 분석됩니다. BeanPostProcessor는 사용자가 Bean 초기화 전후에 Bean에서 작동할 수 있는 인터페이스 메소드를 정의합니다. Javadoc에서 말하는 것처럼 중요한 구현 클래스 중 하나인 AutowiredAnnotationBeanPostProcessor는 Bean에서 @Autowired 및 @Value 주석의 주입 기능을 지원합니다.

다음은 두 가지 방법이 있습니다.

resource.test.imageServer=http://image.everest.com

1. 첫 번째

@Configuration
public class EverestConfig {
 
    @Value("${resource.test.imageServer}")
    private String imageServer;
 
    public String getImageServer() {
        return imageServer;
    }
 
}
2. 두 번째

@Component
@ConfigurationProperties(prefix = "resource.test")
public class TestUtil {
 
    public String imageServer;
 
    public String getImageServer() {
        return imageServer;
    }
 
    public void setImageServer(String imageServer) {
        this.imageServer = imageServer;
    }
}

그런 다음 필요한 곳에 주입합니다.

    @Autowired
    private TestUtil testUtil;
 
    @Autowired
    private EverestConfig everestConfig;
 
 
    @GetMapping("getImageServer")
    public String getImageServer() {
        return testUtil.getImageServer();
//        return everestConfig.getImageServer();
    }

@Value는 application.properties에서 구성을 가져옵니다. Null

@Value("${spring.datasource.url}")

private String url;

값은 NULL입니다.

Solution

툴 클래스(DBUtils) 객체를 생성할 때 새로운 메소드를 사용하지 말고, springboot에서 관리할 수 있도록 @Autowired 메소드를 사용하세요. 툴 클래스에 @Component를 추가하고, 정의된 속성에 static을 추가하지 마세요. 변수.

올바른 방법

@Autowired
private DBUtils jdbc;
  
@Component
public class DBUtils{
    
    @Value("${spring.datasource.url}")
    private String url;
}

위 내용은 SpringBoot의 @Value로 인해 application.properties 구성이 잘못되었습니다. 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제