오늘은 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 |
포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.