패키지 목록을위한 Spring Boot yaml 구성
application.yml 파일에서 배열을로드합니다. 이 구성입니다 :
ignore:
filenames:
- .DS_Store
- .hg
이 클래스입니다 :
@Value("${ignore.filenames}")
private List<String> igonoredFileNames = new ArrayList<>();
동일한 클래스에는 다른 구성이 잘로드됩니다. 내 yaml 파일에 탭이 없습니다. 여전히 다음 예외가 발생합니다.
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'ignore.filenames' in string value "${ignore.filenames}"
내 추측으로는 (가) 추측 것입니다 @Value
"복잡한"유형에 맞는 수 없습니다. 다음과 같은 prop 클래스를 사용할 수 있습니다.
@Component
@ConfigurationProperties('ignore')
class IgnoreSettings {
List<String> filenames
}
제발 참고 : 이 코드는 그루비 - 하지 자바 예제 짧은 유지-! 대한 정보는 의견을 참조하십시오.
전체 예제를 참조하십시오 https://github.com/christoph-frick/so-springboot-yaml-string-list
application.yml에서 쉼표로 구분 된 값을 사용하십시오.
ignoreFilenames: .DS_Store, .hg
액세스를위한 자바 코드
@Value("${ignoreFilenames}")
String[] ignoreFilenames
작동 중입니다.)
스프링 부트 문서에서 https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
YAML 목록은 [index] 역 참조자가있는 속성 키로 표시됩니다 (예 : 다음 YAML).
my:
servers:
- dev.bar.com
- foo.bar.com
다음과 같은 속성으로 변환됩니다.
my.servers[0]=dev.bar.com
my.servers[1]=foo.bar.com
Spring DataBinder 유틸리티를 사용하는 것과 같은 속성에 바인딩 선택 @ConfigurationProperties
유형의 대상 Bean에 속성이 java.util.List
있어야하고 setter를 제공하거나 변경 가능한 값으로 초기화해야합니다. 예를 들면 다음과 같습니다. 위의 속성에. 질문 코드는 다음과 가변합니다.
@ConfigurationProperties(prefix="ignore")
public class Filenames {
private List<String> ignoredFilenames = new ArrayList<String>();
public List<String> getFilenames() {
return this.ignoredFilenames;
}
}
Ahmet의 답변 외에도 >
기호를 사용하여 쉼표로 구분 된 사용하여 줄 바꿈을 추가 할 수 있습니다 .
application.yml :
ignoreFilenames: >
.DS_Store,
.hg
자바 코드 :
@Value("${ignoreFilenames}")
String[] ignoreFilenames;
Ahmet의 답변 은 쉼표로 구분 된 값을 String 배열에 할당하는 방법을 제공합니다.
다른 클래스에서 위의 구성을 사용하려면이를 위해 getter / setter를 만들어야 할 수 있습니다.하지만이 구성을 한 번로드하고 Autowired 주석이있는 빈으로 계속 사용하려면 다음과 같이 수행했습니다.
ConfigProvider.java에서
@Bean (name = "ignoreFileNames")
@ConfigurationProperties ( prefix = "ignore.filenames" )
public List<String> ignoreFileNames(){
return new ArrayList<String>();
}
외부 수업 :
@Autowired
@Qualifier("ignoreFileNames")
private List<String> ignoreFileNames;
자동 연결을 통해 다른 모든 곳에서 동일한 목록을 사용할 수 있습니다.
제 경우에는 .yml 파일의 구문 문제였습니다. 나는 :
@Value("${spring.kafka.bootstrap-servers}")
public List<String> BOOTSTRAP_SERVERS_LIST;
내 .yml 파일의 목록 :
bootstrap-servers:
- s1.company.com:9092
- s2.company.com:9092
- s3.company.com:9092
@Value 주석 필드를 읽지 않았습니다. .yml 파일의 구문을 다음과 같이 변경했을 때 :
bootstrap-servers >
s1.company.com:9092
s2.company.com:9092
s3.company.com:9092
잘 작동했습니다.
@Value("${your.elements}")
private String[] elements;
yml 파일 :
your:
elements: element1, element2, element3
참고 URL : https://stackoverflow.com/questions/26699385/spring-boot-yaml-configuration-for-a-list-of-strings
'IT' 카테고리의 다른 글
ReactJS 호출 메소드 (0) | 2020.07.24 |
---|---|
키워드와 키워드의 차이점 (0) | 2020.07.24 |
R 발광 (0) | 2020.07.24 |
cython 및 mingw로 실행하면 gcc가 생성됩니다 : 오류 : 인식 할 수없는 명령 행 옵션 '-mno-cygwin' (0) | 2020.07.24 |
Git Bash의 Windows 설치에서 ~ 디렉토리 변경 (0) | 2020.07.24 |