스프링 부트 @Value 속성
Spring Boot 어플리케이션이 있으며 클래스 중 하나에서 application.properties 파일의 속성을 참조하려고 합니다.@Value그러나 속성이 해결되지 않습니다.비슷한 게시물을 보고 제안을 따르려고 노력했지만 도움이 되지 않았습니다.클래스는 다음과 같습니다.
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class PrintProperty {
@Value("${file.directory}")
private String fileDirectory;
public void print() {
System.out.println(fileDirectory);
}
}
property file.directory가 있습니다.application.properties다른 분야도 있어요.
나도 너처럼 같은 문제가 있었어.여기 오류 코드가 있습니다.
@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();
여기서 @Value로 주석이 붙은 필드는 null입니다.이는 Spring이 신규로 작성된 GetExprsAndEnvId 복사에 대해 알지 못하기 때문입니다.
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"가 출력됩니다.
스프링 부트 버전 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;
}
그럼 원하는 시간에 수업을 주입하세요.
편집:
POJO에 속성값을 삽입할 수 있기 때문에 앞으로는 @ConfigurationProperties를 사용합니다.속성 위에 계층 정렬을 유지합니다.또한 POJO 속성 위에 검증을 둘 수 있습니다.링크를 참조해 주세요.
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;
}
}
나에게 알려주려고 해.
패키지 선언을 OP에 포함시키지 않았습니다만, 어느 쪽도 OP에 포함되지 않았을 가능성이 있습니다.@SpringBootApplication도 아니다@ComponentScan를 스캔하고 있습니다.@Component.
그@ComponentScan자바독 상태:
어느 하나
basePackageClasses또는basePackages(또는 그 별칭)value검색할 특정 패키지를 정의하도록 지정할 수 있습니다.특정 패키지가 정의되지 않은 경우 이 주석을 선언하는 클래스의 패키지에서 검색이 수행됩니다.
이전에 IER은 이것에 많은 시간을 허비했고, 내 애플리케이션 클래스를 내 앱의 패키지 트리에서 가장 높은 패키지로 옮기는 것이 가장 쉬웠다는 것을 알게 되었습니다.
최근에 gotcha와 마주친 것은 값 삽입이 완료되기 전에 속성을 읽고 있었다는 것입니다.이 도움이 .@PostConstruct삽입된 값을 읽을 수 있는 가장 빠른 시간인 것 같습니다.물론 스프링이 이 값을 호출하도록 해야 합니다.
비슷한 문제가 있었는데 위의 예시는 속성을 읽는 데 도움이 되지 않습니다.아래 링크에 있는 SpringBoot 어플리케이션의 application.properties 파일에서 속성 값을 읽을 수 있는 전체 클래스를 게시했습니다.
스프링 부트 - Environment @Autowired가 Null Pointer를 슬로우합니다.예외.
당신의 문제는 당신이 필요로 하는 것이 PropertySourcesPlaceholderConfigurer[ Configuration ](설정) [Bean](빈)저는 강조해서 스태틱이라고 말했습니다.왜냐하면 저는 스태틱이 있었는데 작동하지 않았기 때문입니다.
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
서비스 클래스에서도 같은 문제가 있었습니다.@Value 대신 @ConfigurationProperties를 사용하여 해결했습니다.
- 다음과 같은 클래스를 만듭니다.
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "file")
public class FileProperties {
private String directory;
public String getDirectory() {
return directory;
}
public void setDirectory(String dir) {
this.directory = dir;
}
}
- Boot Application 클래스에 다음 항목을 추가합니다.
@EnableConfigurationProperties({
FileProperties.class
})
- FileProperties를 PrintProperty 클래스에 주입하면 getter 메서드를 통해 속성을 얻을 수 있습니다.
언급URL : https://stackoverflow.com/questions/39047333/spring-boot-value-properties
'programing' 카테고리의 다른 글
| Python - JSON 파일을 데이터 프레임으로 변환하는 방법 (0) | 2023.03.14 |
|---|---|
| 대응: 외부 html 파일을 로드 및 렌더링하는 방법 (0) | 2023.03.09 |
| 렌더링 방법에서 null을 반환하는 반응 성분 Jest 효소 검정 (0) | 2023.03.09 |
| 각도와 리액션이 함께 플레이할 수 있나요? (0) | 2023.03.09 |
| '시작' 시 tsconfig.json이 덮어쓰지 않도록 react-script를 구성하는 방법 (0) | 2023.03.09 |