ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • properties 대신 yaml 사용 해보자
    카테고리 없음 2023. 4. 19. 09:56
    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 어노테이션으로 불러 올 수 없다. 해당 어노테이션을 사용 하려면 프로퍼티 파일을 사용해야된다.

    댓글

Designed by Tistory.