본문 바로가기

공부/Spring

[Boot] 환경설정 관련

환경설정


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