Spring Boot: @Value는 항상 null을 반환합니다.
다음 값을 사용합니다.application.properties
다른 클래스의 메서드에 전달하기 위한 파일입니다.문제는 값이 항상 반환된다는 것입니다.NULL
무엇이 문제일까요?잘 부탁드립니다.
application.properties
filesystem.directory=temp
FileSystem.java
@Value("${filesystem.directory}")
private static String directory;
정적 변수에는 @Value를 사용할 수 없습니다.정적으로 표시하거나 정적 변수에 값을 주입하는 방법을 여기서 확인해야 합니다.
https://www.mkyong.com/spring/spring-inject-a-value-into-static-variables/
EDIT: 앞으로 링크가 끊어질 경우를 대비해서입니다.정적 변수에 대해 정적이 아닌 설정자를 만들어 이 작업을 수행할 수 있습니다.
@Component
public class MyComponent {
private static String directory;
@Value("${filesystem.directory}")
public void setDirectory(String value) {
this.directory = value;
}
}
클래스는 Spring bean이어야 하지만 그렇지 않으면 인스턴스화되지 않고 Spring에 의해 세터에 액세스할 수 없습니다.
앞의 모든 제안 이후에도 여전히 문제가 발생하는 경우, 빈이 구성되기 전에 해당 변수에 액세스하지 않도록 하십시오.
즉, 다음과 같습니다.
이렇게 하는 대신:
@Component
public MyBean {
@Value("${properties.my-var}")
private String myVar;
private String anotherVar = foo(myVar); // <-- myVar here is still null!!!
}
수행:
@Component
public MyBean {
@Value("${properties.my-var}")
private String myVar;
private String anotherVar;
@PostConstruct
public void postConstruct(){
anotherVar = foo(myVar); // <-- using myVar after the bean construction
}
}
이것이 누군가가 시간 낭비를 피하는 데 도움이 되기를 바랍니다.
@Plog의 답변 외에 당신이 교차 확인해야 할 몇 가지 사항이 있습니다.
static
변수에 값을 주입할 수 없습니다.@Plog의 답변을 확인합니다.
- 클래스에 주석이 달렸는지 확인합니다.
@Component
또는@Service
- 구성 요소 스캔은 동봉된 패키지를 스캔하여 콩을 등록해야 합니다.xml이 활성화된 경우 XML 구성을 확인합니다.
- 속성 파일의 경로가 올바른지 또는 클래스 경로에 있는지 확인합니다.
다른 답들은 아마도 OP에 맞는 답일 것입니다.
그런데 같은 증상을 겪었습니다.@Value
-선택 필드 있음null
하지만 다른 근본적인 문제가 있습니다.
import com.google.api.client.util.Value;
올바른 항목을 가져오는 중인지 확인합니다.@Value
주석 클래스!특히 요즘 IDE의 편리함으로 인해 이것은 매우 쉽게 실수할 수 있습니다(InteliJ를 사용하고 있으며, 자동으로 가져오는 내용을 읽지 않고 너무 빨리 자동으로 가져오면 저처럼 몇 시간을 낭비할 수 있습니다).
물론 가져올 올바른 클래스는 다음과 같습니다.
import org.springframework.beans.factory.annotation.Value;
스프링은 @Value 주석을 찾을 때 종속성 주입을 사용하여 특정 값을 채웁니다.그러나 인스턴스 변수에 값을 전달하는 대신 암묵적인 세터에 전달됩니다.그런 다음 이 설정기는 NAME_STATIC 값의 채우기를 처리합니다.
@RestController
//or if you want to declare some specific use of the properties file then use
//@Configuration
//@PropertySource({"classpath:application-${youeEnvironment}.properties"})
public class PropertyController {
@Value("${name}")//not necessary
private String name;//not necessary
private static String NAME_STATIC;
@Value("${name}")
public void setNameStatic(String name){
PropertyController.NAME_STATIC = name;
}
}
당신은 이것을 활용할 수 있습니다.값을 평가하는 참조(개인 String myVar)
this.myVar
언급URL : https://stackoverflow.com/questions/46032748/spring-boot-value-returns-always-null
'programing' 카테고리의 다른 글
사전에서 여러 키를 안전하게 제거 (0) | 2023.06.30 |
---|---|
vuex 지속 상태가 vue 라우터 탐색 가드와 함께 작동하지 않음 (0) | 2023.06.30 |
dplyr을 사용하여 그룹별 행 수 계산 (0) | 2023.06.30 |
MariaDB "ON UPDATE CASCADE" 제약 조건이 예상대로 작동하지 않습니까? (0) | 2023.06.30 |
sys.stdout을 로그 파일로 복제하는 방법은 무엇입니까? (0) | 2023.06.30 |