spring boot에는 yaml(야물?)을 사용할 수 있다.
json 과 비슷한 형태로 편리한 문법을 갖고 있다.
우리는 classpath 에 application.yml 을 추가 하면 자동으로 boot가 스캔한다.
test:
db: localdb
우리는 다음과 같이 설정한다.
해당 클래스에 바인딩을 하자.
@Configuration
@ConfigurationProperties(prefix = "test")
public class ServerProfiles {
private String db;
public String getDb() {
return db;
}
public void setDb(String db) {
this.db = db;
}
}
그리고 나서 테스트를 해보자
@Autowired
private ServerProfiles serverProfiles;
@Test
public void yamlTest(){
System.out.println(serverProfiles.getDb());
}
localdb라는문자가 출력 된다.
우리는 쉬운방법으로 yaml을 사용할 수 있다.
그리고 또한 application.yml 말고 다른 파일을 불러오고 싶다면 다음과 같이 하면 된다.
예를들어 server.yml에 해당 설정이 있다고 가정하자.
우리는 이렇게 할 수 있다.
@Configuration
@ConfigurationProperties(locations = "classpath:server.yml", prefix = "test")
public class ServerProfiles {
private String db;
public String getDb() {
return db;
}
public void setDb(String db) {
this.db = db;
}
}
근데 조금 이상한게 있다. setter로 값을 넣는다.
불변 객체가 아니다. 정보를 언제든지 바꿀수 있다는건데..
Map이나 List경우에는 setter가 필요 없는데
@Configuration
@ConfigurationProperties(locations = "classpath:server.yml")
public class ServerProfiles {
Map<String,String> test = new HashMap<>();
public Map<String, String> getTest() {
return test;
}
}
암튼 그렇다.
우리는 실제 개발을 할때 로컬 테스트 개발 운영 등 여러 서버에 적용 하고 있다.
이럴경우 다음과 같이 설정 하자
test:
db: localdb
---
spring:
profiles: development
test:
db: testdb
---
spring:
profiles: production
test:
db: prodb
mvn으로 실행 하거나 jar파일을 실행 할때 다음과 같이 옵션을 주면된다.
java -Dspring.profiles.active="production" -jar spring-test-0.0.1-SNAPSHOT.jar
mvn spring-boot:run -Dspring.profiles.active="production"
우리는 이렇게 yaml파일을 사용할 수 있다.
yaml 파일의 단점은
@PropertySource
어노테이션으로 불러 올 수 없다.
해당 어노테이션을 사용 하려면 프로퍼티 파일을 사용해야된다.