오늘은 SpringBoot 프레임워크에서 application.properties 파일을 읽는 방법에 대해 포스팅 합니다.

Java 로 파일을 읽을 때, 프로젝트 경로는 보통 아래의 두 API를 통해 읽습니다.

System.getProperty("user.dir") , [class].class.getResource("/").getPath()

직접 구현해보시면 아시겠지만, 많은 이유로 프로젝트 경로를 구하는 것은 생각보다 까다롭습니다.

예를들어, 멀티 모듈 프로젝트 또는 resource 폴더 위치에 따른 변동사항 등등 문제로 골치아픕니다.

하지만, SpringBoot@Value API 또는 Environment API 를 사용하면 편리합니다.

@Value API

클래스 변수위에 어노테이션으로 설정 할 수 있는것이 특징입니다.

간단하게 @Value(${프로퍼티 키})로 선언하면 됩니다.

예를들어, 웹 프로젝트의 컨텍스트 루트 경로를 코드상에서 알고 싶을때 아래와 같이 코드를 작성하면 됩니다.

public class ProjectContext {
   @Value(${"server.servlet.context-path"})
   private String contextPath;
   
   public String getContextPath() {
       return contextPath;
  }
}

문제는 Spring 생명주기 순서 문제로, null 값이 뜰 때가 있습니다.

만약 해당 문제점이 있다면, 아래에서 소개할 Environment API를 사용해야 합니다.

Environment API

Environment APIgetProperty(프로퍼티 키) 메서드를 사용합니다.

마치 JavaProperties API의 사용법과 비슷합니다.

마찬가지로 컨텍스트 루트 경로를 구한다고 가정해봅시다.

public class ProjectContext {
  private static final String CONTEXT_PATH_KEY = "server.servlet.context-path";
  private Environment environment;

  @Autowired
  public ProjectContext(Environment environment) {
      this.environment = environment;
      System.out.println(getContextPath()); // /Context-Path 출력
}

  public String getContextPath() {
      return environment.getProperty(CONTEXT_PATH_KEY);
}
}

Environment API@Value API 와 달리, Environment 객체가 안전하게 주입 되면,

안전하게 application.properties 을 읽을 수 있습니다.



포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

+ Recent posts