[데브코스] Resources 폴더 설정
Updated: Categories: TILW3D4 - application.properties / YAML / Resource에 대해 공부해보자
Properties
- Spring 생성시 자동생성되며, resources 폴더 하위에 있음
- DB 접속정보나 포트정보 등등을 정의하는 것
- 보통 환경변수로 지정하고 싶은 것을 써놓는 듯?
사용법
application.properties
파일에변수명=값
형태로 저장한다.- 변수 사용시 AppContext에
@PropertySource("application.properties")
어노테이션을 달아준 후 컨테이너 생성하면됨. - 컴포넌트 내에서
@Value()
어노테이션을 사용해 프로퍼티(환경변수) 값을 가져올 수 있다.- 시스템 환경변수도 가져올 수 있다.
- 만약 프로퍼티 등록 키값과 시스템 키값이 동일하다면, 시스템이 우선순위가 더 높음.
Provider
- 컴포넌트에 특정
.properties
파일을 연결하여 Value를 제공하는 Provider 클래스를 만들기도 한다.
// 예시
@Component
@PropertySource("version.properties")
public class VersionProvider {
private final String version;
public VersionProvider(@Value("${version:v0.0.0}") String version) {
this.version = version;
}
public String getVersion() {
return version;
}
}
YAML
- 어디선가 많이 본 녀석이다.
- Spring의 기본 프로퍼티 확장자는
.properties
이고 다른 확장자는 지원 X (Boot에서는 지원함) - 따라서
.yaml
으로 작성된 파일을 프로퍼티로 읽어오기 위해선 PropertySource Factory를 구현해야한다
@ConfigurationProperties
- 리스트 바인딩을 위해선 스프링’부트’에서 제공하는
@ConfigurationProperties
를 사용해야함 - 바인딩용 클래스에 해당 어노테이션을 달고 Prefix를 지정하여 해당 프리픽스 하위 데이터를 바인딩함.
- 해당 클래스에는 Getter와 Setter가 필수적으로 존재해야함.
- 프로퍼티가 적을땐
@Value
로 바인딩해도 되지만, 많아지면 일일히 하기 힘드니까 이런 방법을 씀!!
@Profile
- AppContext 생성시
.setAdditionalProfiles()
메소드를 통해 Bean을 선택해 생성이 가능하다 - 컴포넌트 파일 위에
@Profile()
어노테이션을 달아 구분한다
프로필별 환경변수 분리
spring.config.activate.on-profile
을 활용해 프로필별 환경변수를 설정할 수 있다.- yaml 파일을 분리해서 프로필별 변수 설정도 가능
application.yaml
이 default 파일임application-프로필명.yaml
네이밍 규칙을 따라 프로필명 설정가능
Resource
- 스프링에서 제공하는 AppContext에 자원을 가져올 수 있는 기능
.getResource()
메소드로 리소스를 읽어올 수 있다- resources 폴더 내 :
.getResource(파일명)
- resources 폴더 외부 :
.getResource(file:경로)
(root는 프로젝트 폴더경로임) - URL :
.getResource(URL주소)
- resources 폴더 내 :