스프링 부트: YAML 파일에서 @Value 로드
에서 속성을 로드해야 합니다..yml
file - 응용 프로그램이 파일을 읽을 수 있는 폴더의 경로를 포함합니다.
다음 코드를 사용하여 속성을 주입합니다.
@Value("${files.upload.baseDir}")
private String pathToFileFolder;
그.yml
개발 파일은 아래에 있습니다.src/main/resources/config/application.yml
개발 설정을 덮어쓰기 위해 운영 환경에서 다음 명령을 사용하여 응용 프로그램을 실행하고 있습니다.
java -jar app.jar --spring.config.location=/path/to/application-production.yml
Spring Boot 매뉴얼에는 다음과 같이 기재되어 있습니다.
Spring Application은 다음 위치에 있는 application.properties 파일에서 속성을 로드하여 Spring 환경에 추가합니다.
현재 디렉토리의 /config 서브 디렉토리.
현재 디렉토리
classpath /config 패키지
클래스 패스 루트
그 외:
'.properties' 대신 YAML('yml') 파일을 사용할 수도 있습니다.
그.yml
파일 내용:
{...}
files:
upload:
baseDir: /Users/Thomas/Code/IdeaProjects/project1/files
{...}
그리고 나의Application
클래스 주석:
@SpringBootApplication
@EnableCaching
응용 프로그램을 실행하면 예외가 발생합니다.
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'files.upload.baseDir' in string value "${files.upload.baseDir}"
를 사용해야 합니까?YamlPropertySourceLoader
클래스 또는 특별한 주석을 추가하여 지원을 가능하게 합니다..yml
스프링 부츠에?
편집:.yml
파일에는 다음과 같은 스프링 부트에 의해 성공적으로 로드되는 다른 속성이 포함되어 있습니다.dataSource.XXX
또는hibernate.XXX
.
예를 들어 application.yml 입니다.
key:
name: description here
클래스:
@Value("${key.name}")
private String abc;
M. Deinum의 말이 맞아, 내가 제공한 설정은 효과가 있어.yml
파일의 들여쓰기가 잘못되어 속성을 찾을 수 없습니다.
컨스트럭터에서 변수에 접속하려고 했기 때문에 위의 내용은 나에게 효과가 없었습니다.하지만 공사에서는 아직 가치가 투입되지 않았습니다.결국 https://mrhaki.blogspot.com/2015/04/spring-sweets-using-value-for.html을 사용하여 작업을 수행할 수 있게 되었습니다.
아마 이것은 다른 사람들에게 도움이 될 것이다.
나한테는 자산 파일에 있는 중복된 키가 원인이었어...
저도 모르게 큰 yml 파일에서 같은 키를 사용하고 있었습니다.
key:
key1: value
key2: value
key:
key3: value
yml 속성 파일:
xxxx:
page:
rowSize: 1000
Yaml 속성 설정 클래스를 만듭니다.
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "xxxx")
public class YmlPropertiesConfig {
private Page page;
public Page getPage() {
return page;
}
public void setPage(Page page) {
this.page = page;
}
public class Page {
private Integer rowSize;
public Integer getRowSize() {
return rowSize;
}
public void setRowSize(Integer rowSize) {
this.rowSize = rowSize;
}
}
}
마지막으로 입수하여 사용합니다.
public class XXXXController {
@Autowired
private YmlPropertiesConfig ymlProperties;
public String getIt(){
Integer pageRowSize = ymlProperties.getPage().getRowSize();
}
}
나는 그 문제가 있다.Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder
properties.yaml에 테스트 스프링 부트 프로파일을 설정했기 때문입니다.프로필이 없는 앱을 실행할 때 Spring에서 테스트 프로필 속성을 찾을 수 없습니다.
따라서 속성 또는 yaml에서 스프링 부트 프로파일을 삭제하거나 활성화된 프로파일을 사용하여 앱을 실행합니다.
컨피규레이션파일 예는 다음과 같은 예를 나타냅니다.
@Configuration
public class AppConfig {
@Value("${prop.foo}")
private String foo;
@Value("${prop.bar}")
private String bar;
@Bean
BeanExample beanExample() {
return new BeanExample(foo, bar);
}
}
@RestController에 문제가 있는 사용자를 위해 다음과 같이 수행합니다.
@Autowired
@Value("${google.recaptcha}")
private String keyRecaptcha;
속성 파일의 이름이 잘못 지정되었습니다.applcation.properties
스프링 이니셜라이저그러나 속성을 .yml 형식으로 추가했는데 동일한 오류로 검색되지 않았습니다.
을 「 」로 했을 때.application.yml
이치노
언급URL : https://stackoverflow.com/questions/34556677/spring-boot-load-value-from-yaml-file
'programing' 카테고리의 다른 글
Python에서 YAML 파일을 JSON 개체로 변환 (0) | 2023.03.06 |
---|---|
npm 패키지 설치 시 종속성 트리 오류를 해결할 수 없습니다. (0) | 2023.03.06 |
AngularJS-Twig가 더블컬리브레이트와 경합합니다. (0) | 2023.03.06 |
Gson에서는 기본 no-args 컨스트럭터가 필수입니까? (0) | 2023.03.06 |
ng-src vs src 사용 (0) | 2023.03.01 |