오늘은 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 {
(${"server.servlet.context-path"})
private String contextPath;
public String getContextPath() {
return contextPath;
}
}문제는 Spring 생명주기 순서 문제로, null 값이 뜰 때가 있습니다.
만약 해당 문제점이 있다면, 아래에서 소개할 Environment API를 사용해야 합니다.
Environment API
Environment API는 getProperty(프로퍼티 키) 메서드를 사용합니다.
마치 Java의 Properties API의 사용법과 비슷합니다.
마찬가지로 컨텍스트 루트 경로를 구한다고 가정해봅시다.
public class ProjectContext {
private static final String CONTEXT_PATH_KEY = "server.servlet.context-path";
private Environment environment;
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
'Spring' 카테고리의 다른 글
| [Spring] @Transactional 사용시 주의해야할 점 (14) | 2020.01.26 |
|---|---|
| [Spring] Jackson 라이브러리 이해하기. (9) | 2018.12.10 |
| [SpringBoot] SpringBoot로 MongoDB 데이터 메서드로 주입하기 (0) | 2018.12.04 |
| [SpringBoot] SpringBoot와 MongoDB 연동하기 (1) | 2018.11.27 |
포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.