개발환경은 여러가지가 있을 수 있다.
이때 테스트 환경에서는 테스트 데이터베이스와 연결되어있어야하고 실제 프로덕트 환경에서는 프로덕트 데이터베이스와 연결되어있어야한다.
이때 환경별로 Profile을 만들어 각각 다르게 설정을 해줄 수 있다.
개발 환경별로 다르게 로깅하도록 설정해보자.
현재는 개발 환경과 프로덕트 환경 2개만 있다고 가정하고 profile을 작성해보자.
../src/main/resources/에 아래에 2개의 프로필을 만든다.
파일에 아래 내용을 추가해주자
logging.level.org.springframework=trace
파일에 아래 내용을 추가해주자
logging.level.org.springframework=info
이렇게 설정해도 실제로는 application.properties
파일 내용대로 실행된다.
이제 application.properties
파일에 아래 내용을 추가해 환경별 프로필을 활성화해주자.
spring.profiles.active=prod
만약 이미
application.properties
에 겹치는 설정이 있다면
해당 프로필의 설정이 우선순위가 높다.
예를 들어
# application.properties
`logging.level.org.springframework=DEBUG`
`spring.profiles.active=prod`
# application-prod.properties
logging.level.org.springframework=info
spring.profiles.active=prod
로
application-prod.properties
가 활성화되어도
우선순위에 따라 스프링 애플리케이션은
logging.level.org.springframework=DEBUG
로 실행이 된다.
- trace
- debug
- info
- warning
- error
- off
spring에서 각 서비스나 환경별로 애플리케이션의 설정값을 다르게 주고 싶은 경우가 있다. 이때 어떻게 해야할까?
스프링에서 권장하는 방식은 @ConfigurationProperties
를 사용해 클래스에 정의한느 것을 권장한다.
logging.level.org.springframework=INFO
spring.profiles.active=dev
logging.level.org.springframework=debug
currency-service.url=http://localhost:8080
currency-service.username=devUser
currency-service.key=devKey
package com.penloo.learn5;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
// currency-service.url=
// currency-service.username=
// currency-service.key=
// properties를 사용하여 설정값을 가져올 수 있도록 하는 어노테이션
// prefix를 통해 설정값의 prefix를 지정할 수 있음
@ConfigurationProperties(prefix = "currency-service")
@Component
public class CurrencyServiceConfiguration {
private String url;
private String username;
private String key;
// getter, setter
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
}
package com.penloo.learn5;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;
@RestController
public class CurrencyConfigurationController {
// CurrencyServiceConfiguration.java 파일에서 가져온 설정값을 사용하기 위해 인스턴스 생성
@Autowired
private CurrencyServiceConfiguration configuration;
// 가져온 인스턴스의 설정값을 반환하는 REST API
// Course: id, name, author
@RequestMapping("/currency-configurations")
public CurrencyServiceConfiguration retrieveAllConfigurations(){
return configuration;
}
}
http://localhost:8080/currency-configurations
이 주소로 접속해서 API를 호출해보니
property에 설정한 값을 반환하는 것을 볼 수 있다.