스프링 부트 프로퍼티 파일은 설정이나 기타 정적인 값을 키값 형식으로 관리한다.
이것을 이용하면 복잡한 XML설정을 하나의 파일로 관리할 수 있다.
YAML 파일을 이용하면 깊이에 따라 관계를 구분 짓기 때문에 List, Set, Map 등 다양한 바인딩형 매핑이 가능하다.
매핑 방식 중 유용하게 사용되는 @Value와 @ConfigurationProperties를 비교해본다.
유연한 바인딩: 프로퍼티 값을 객체에 바인딩할 때 Camel표기법으로 선언하고 프로퍼티 키는 카멜, 케밥 등 다양한 표기법으로 선언해서 바인딩할 수 있다.
메타데이터 지원: 프로퍼티 키에 대한 정보를 메타데이터 파일로 제공한다. 이름, 타입, 디폴트값 등 힌트가 되는 정보를 얻을 수 있다.
SpEL(Spring Expression Language, 스프링 표현언어) 평가: SpEL은 런타임에 객체 참ㅁ조에 대해 질의하고 조작하는 기능을 지원하는 언어다. @Value만 사용 가능하다.
@Value
프로퍼티 키를 사용해서 특정 값을 호출할 수 있다.
application.yml
property:
test:
name: hiProperty
propertyList : a,b,c
PropertyTest.java
@SpringBootTest
public class PropertyTest {
@Value("${property.test.name}")
private String propertyTestName;
@Value("${propertyList}")
private List<String> propertyList;
@Value("#{'${propertyList}'.split(',')}")
private List<String> proList;
@Test
public void getPropertyName() {
assertThat(propertyTestName, is("hiProperty"));
assertThat(propertyList.size(), is(3));
assertThat(propertyList.get(0), is("a"));
assertThat(proList.size(), is(3));
assertThat(proList.get(1), is("b"));
}
}
propertyList를 리스트로 직접 받을 수도 있고 split해서 사용할 수도 있다.
단일 값 매핑과 배열, List 매핑 모두 가능하다.
@ConfigurationProperties
property 키값의 prefix가 같을 경우 그것을 묶어서 Bean 으로 등록할 수 있다.
country:
list:
- name : Korea
capital : Seoul
- name : Japan
capital : Tokyo
- name : China
capital : Beijing
@Getter
@Setter
@ToString
@Component
@ConfigurationProperties(prefix = "country")
public class CountryProperty {
private List<Country> list;
@Getter
@Setter
@ToString
public static class Country {
private String name;
private String capital;
}
}
@ConfigurationProperties를 추가하면 메타데이터를 생성해 자동완성 기능을 가능하게 해주는 의존성을 추가해야한다.
implementation group: 'org.springframework.boot', name: 'spring-boot-configuration-processor', version: '2.6.3'
configuration-processor 의존성을 추가해준다.
testImplementation 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
테스트에서 사용하면 test에도 추가해줘야 한다.
@SpringBootTest
public class PropertyTest {
@Autowired
CountryProperty property;
@Test
public void getConfigurationProperty() {
assertThat(property.getList().size(), is(3));
assertThat(property.getList().get(0).getName(), is("Korea"));
}
}
테스트를 진행하면 성공한다.
'Spring' 카테고리의 다른 글
Spring Boot @DataJpaTest 사용방법 (0) | 2022.02.21 |
---|---|
Spring Boot @EnableAutoConfiguration (0) | 2022.02.16 |
Spring Boot 멀티 모듈 프로젝트 관리 (0) | 2022.02.15 |
Spring Boot2 Swagger 사용 (0) | 2022.02.08 |
Spring restTemplate Connection pool 사용 (0) | 2022.02.07 |