환경설정
1. 환경 프로퍼티 파일 설정 YAML 사용
Properties 파일의 표현의 한계로 YAML 파일을 더 많이 사용함
파일명 : application.yml
위치 : src/main/resources/
- 기본은 application.properties 파일있으므로 위 파일 생성 필요함
- application.properties 파일 삭제
2. YAML 파일 매핑
YAML 파일을 사용하면 깊이에 따라 관계를 구분 짓기 때문에 List, Set, Map 등 다양한 바인딩형 매핑이 훨씬 간편함
방법 : @Value, @ConfigurationProperties
- 유연한 바인딩
- 메타데이터 지원
- SpEL 평가
@Value
특징
- 프로퍼티의 키를 사용하여 특정한 값을 호출할 수 있음
- 키를 정확히 입력해야 하며 갑이 없을 경우에 대해 예외처리 필요함
테스트
- SpEL을 사용하여 매핑하는 방법 확인
- 주로 단일 필드값을 가져오는데 사용함
application.yml
property:
test:
name: property depth test
propertyTest: test
propertyTestList: a,b,c
AutoConfigurationTests.java
package com.soon.soon_api;
import org.hamcrest.Matchers;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
public class AutoConfigurationTests {
@Value("${property.test.name}")
private String propertyTestName;
@Value("${propertyTest}")
private String propertyTest;
@Value("${noKey:default value}")
private String defaultValue;
@Value("${propertyTestList}")
private String[] propertyTestArray;
@Value("#{'${propertyTestList}'.split(',')}")
private List<String> propertyTestList;
@Test
public void testValue(){
Assert.assertThat(propertyTestName, Matchers.is("property depth test"));
Assert.assertThat(propertyTest, Matchers.is("test"));
Assert.assertThat(defaultValue, Matchers.is("default value"));
Assert.assertThat(propertyTestArray[0], Matchers.is("a"));
Assert.assertThat(propertyTestList.get(1), Matchers.is("b"));
}
}
assertThat() : 첫 번째 파라미터와 두 번째 파라미터가 일치해야 테스트 성공
@ConfigurationProperties 살펴보기
특징
- 다양한 형의 프로퍼티값을 매핑할 수 있음
- 기본적으로 접두사를 사용하여 값을 바인딩 함
테스트
List, Map 자료구조로 프로퍼티값을 매핑 테스트
application.yml
fruit:
list:
- name: banana
color: yellow
- name: apple
color: red
- name: water melon
color: green
FruitProperty.java
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
@Data
@Component
@ConfigurationProperties("fruit")
public class FruitProperty {
// @ConfigurationProperties 사용하려면 해당 클래스를 @Component로 선언해야 함 그래야 의존성 주입이 가능함
// 접두사가 fruit인 프로퍼티키값을 읽어와서 필드값에 매핑함
private List<Map> list;
}
FruitPropertyTests.java
import com.soon.soon_api.demo.FruitProperty;
import org.hamcrest.Matchers;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
import java.util.Map;
@RunWith(SpringRunner.class)
@SpringBootTest
public class FruitPropertyTests {
@Autowired
FruitProperty fruitProperty;
@Test
public void test(){
List<Map> fruitData = fruitProperty.getList();
Assert.assertThat(fruitData.get(0).get("name"), Matchers.is("banana"));
Assert.assertThat(fruitData.get(0).get("color"), Matchers.is("yellow"));
Assert.assertThat(fruitData.get(1).get("name"), Matchers.is("apple"));
Assert.assertThat(fruitData.get(1).get("color"), Matchers.is("red"));
Assert.assertThat(fruitData.get(2).get("name"), Matchers.is("water melon"));
Assert.assertThat(fruitData.get(2).get("color"), Matchers.is("green"));
}
}
@ConfigurationProperties는 기본 컬렉션 타입뿐만 아니라 POJO 타입 매핑도 제공함
Fruit POJO 생성하여 사용하는 것도 가능함
'공부 > Spring' 카테고리의 다른 글
[Boot] @SpringBootTest (0) | 2019.02.15 |
---|---|
[AvtiveMQ] 정리 (0) | 2019.02.10 |
[JPA] 스프링 부트 + jPA 사용시 참고.... (0) | 2019.02.09 |
[Boot] DataSource 설정이 없이 실행하고 싶다. (0) | 2019.02.08 |
[인텔리제이] lombok 설정 (0) | 2019.02.07 |