SpringBoot Configuration에서 값 가져오기 - @Value
SpringBoot 의 Configuration
SpringBoot는 여러가지 Configuration을 application.properties에 담아 사용한다.
application.properties를 사용 해도 되지만 application.yml도 지원 하기 때문에, 새로 만들어 Hierarchy를 표현해서 보기 편하도록 작성 하는 방법도 있다.
더불어서, 이 설정파일인 application.yml의 값들을 불러와서 사용 하는 @Value 어노테이션을 간단히 정리 해 보려고 한다.
application.yml 설정하기
이전에 application.yml을 사용 한 글이 있었는데, 그 글과 유사하게 작성 해 보려고 한다.
다만 통상적인 db세팅이나 서버 포트 세팅같은 부분들 외에, 특정 값을 가져오는 것을 한번 만들어 보려고 한다
# application.yml
myspring:
test:
name: wool
age: 20
myspringListTest: banana,orange,apple
기본적인 세팅 외에, myspring이라는 이름 아래에 test.name, test.age 등을 만들어 놓았다.
접근 할 때에는 그냥 .
을 뒤에 붙여서 하위 요소들로 접근 해 주면 된다.
Test Code 작성
해당하는 값들을 불러 올 수 있는 코드를 만들고 테스트 해 보자.
테스트를 위해 ConfigurationAnnotationTests 클래스를 만들고, 간단한 테스트를 작성 해 보려고 한다
테스트코드를 작성 할 ConfigurationAnnotationTests
클래스를 준비한다
ConfigurationAnnotationTest.java
package com.wool.springconf;
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;
@SpringBootTest
@RunWith(SpringRunner.class)
public class ConfigurationAnnotationTests{
// 코드를 작성 할 부분
}
코드들을 하나씩 작성 해 보자. 위의 application.yml 파일에 작성 된 설정값들을 가져 와 보자
// 위 내용 생략
@Value("${myspring.test.name}")
private String mySpringTestName; // a
@Value("${myspring.test.age}")
private int mySpringTestAge; // b
@Value("${myspringListTest}")
private String[] mySpringArray; // c
@Value("$#{'${myspringListTest}'.split(',')}")
private List<String> mySpringList;
@Value
어노테이션은 configuration 값에 접근 할 수 있게 해 준다
- a)
"${myspring.test.name}"
는 myspring 하위의 test에 접근 한 후, 그 아래에 있는 name에 접근한다는 내용이다. 해당하는 값이@Value
어노테이션 안에 넣어져 있고, 대응되는 mySpringTestName에application.yml
에서 작성한wool
이 저장된다 - b)
"${myspring.test.age}"
도 마찬가지로, myspring하위의 test에 있는 age값에 접근한다는 명시이고, 해당 값을mySpringTestAge
에 저장한다 - c,d)
myspringListTest
값은,application.yml
값을 보면 다른 값과 조금 다르게myspringListTest: banana,orange,apple
이렇게 값이 묶여있다. 두가지 방법으로 받아 줄 수 있다 – c)String[] mySpringArray
처럼, 리스트에 대입해서, 리스트 내부에 값을 저장해서 하나씩 값을 확인 해 줄 수 있다– d)List<String> mySpringList
도 동일하게 받아 줄 수 있다
전체 TestCode
package com.wool.springconf;
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;
@SpringBootTest
@RunWith(SpringRunner.class)
public class ConfigurationAnnotationTests{
@Value("${myspring.test.name}")
private String mySpringTestName; // a
@Value("${myspring.test.age}")
private int mySpringTestAge; // b
@Value("${myspringListTest}")
private String[] mySpringArray; // c
@Value("$#{'${myspringListTest}'.split(',')}")
private List<String> mySpringList;
@Test
public void valueAnnotationTest(){
Assert.assertEquals(mySpringTestName, "wool");
Assert.assertEquals(mySpringTestAge, 20);
Assert.assertEquals(mySpringArray[0], "banana");
Assert.assertEquals(mySpringArray[1], "orange");
Assert.assertEquals(mySpringArray[2], "apple");
Assert.assertEquals(mySpringList.get(0), "banana");
Assert.assertEquals(mySpringList.get(1), "orange");
Assert.assertEquals(mySpringList.get(2), "apple");
}
}
위의 테스트코드를 실행하면, 우리가 작성한 application.yml
의 값들을 가져와서 기대하는 값과 비교하여 서로 맞는지 확인한다.
값을 잘 가져왔다면 테스트가 성공하는 것을 볼 수 있다
댓글남기기