문자열 목록을 위한 스프링 부트 YAML 설정
에서 문자열 배열을 로드하려고 합니다.application.ymlfile. 설정은 다음과 같습니다.
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}"
application.yml에서 쉼표로 구분된 값을 사용합니다.
ignoreFilenames: .DS_Store, .hg
접속용 자바 코드
@Value("${ignoreFilenames}")
String[] ignoreFilenames
동작하고 있다;)
내 생각엔, 그...@Value"복잡한" 유형에 대처할 수 없습니다.다음과 같은 소품 클래스를 사용할 수 있습니다.
@Component
@ConfigurationProperties('ignore')
class IgnoreSettings {
List<String> filenames
}
주의:이 코드는 Java가 아닌 Groovy입니다.예를 들어 간단히 설명하겠습니다.채용 방법의 힌트는, 코멘트를 참조해 주세요.
자세한 예는, https://github.com/christoph-frick/so-springboot-yaml-string-list 를 참조해 주세요.
spring boot docs https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html 에서 입수할 수 있습니다.
YAML 목록은 [index]디렉서(referencer)가 있는 속성 키로 표시됩니다.예를 들어 다음과 같습니다.
my:
servers:
- dev.bar.com
- foo.bar.com
다음 속성으로 변환됩니다.
my.servers[0]=dev.bar.com
my.servers[1]=foo.bar.com
Spring DataBinder 유틸리티를 사용하여 이러한 속성에 바인딩하려면@ConfigurationProperties(타깃 빈 타입에 속성이 필요합니까?java.util.List셋터를 제공하거나 가변값으로 초기화해야 합니다.예를 들어 위의 속성에 바인드됩니다.질문 코드는 다음과 같습니다.
@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;
내가 할 수 있는 건 이런 것뿐이야
servers: >
dev.example.com,
another.example.com
@Value("${servers}")
private String[] array;
클래스 위의 @Configuration도 잊지 마십시오.
헤어지지 않고서는 그런 행운이...
동작도 가능 (부팅 1.5.8 버전)
servers:
dev.example.com,
another.example.com
@Value("#{'${your.elements}'.split(',')}")
private Set<String> stringSet;
yml 파일:
your:
elements: element1, element2, element3
봄철 SPEL로 놀 수 있는 것이 훨씬 더 많다.
제 경우, 이것은 .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-filters 필드..yml 파일의 구문을 다음과 같이 변경했을 때:
bootstrap-servers: >
s1.company.com:9092,
s2.company.com:9092,
s3.company.com:9092
잘 작동했어요
Ahmet의 답변은 String 배열에 쉼표로 구분된 값을 할당하는 방법을 제공합니다.
위의 설정을 다른 클래스에서 사용하려면 이 설정을 위한 getters/setters를 작성해야 할 수 있습니다.그러나 이 구성을 한 번 로드하고 자동 배선 주석이 있는 빈으로 계속 사용하려면 다음과 같이 하십시오.
ConfigProvider.java에서
@Bean (name = "ignoreFileNames")
@ConfigurationProperties ( prefix = "ignore.filenames" )
public List<String> ignoreFileNames(){
return new ArrayList<String>();
}
외부 수업:
@Autowired
@Qualifier("ignoreFileNames")
private List<String> ignoreFileNames;
자동 연결을 통해 다른 모든 곳에서 동일한 목록을 사용할 수 있습니다.
yaml 파일 구성:
ignore:
filenames: >
.DS_Store
.hg
스프링 구성 요소:
@Value("#{'${gnore.filenames}'.split(' ')}")
private List<String> igonoredFileNames;
이건 나한테 잘 먹혔어.
@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
'programing' 카테고리의 다른 글
| Angularjs: '구문으로 컨트롤러' 및 $watch (0) | 2023.03.01 |
|---|---|
| 각도 JS에서 동적으로 CSS 스타일 속성 적용 (0) | 2023.03.01 |
| JSON을 .plist로 변환합니다. (0) | 2023.03.01 |
| 디렉티브 컴파일 함수의 preLink는 언제 사용할까요? (0) | 2023.03.01 |
| 타자기본에서 사용되지 않는 것으로 표시할 수 있습니까? (0) | 2023.03.01 |