Spring Boot 사용시 특정 속성들을 별도로 만들어(외부화) 다른 환경에서도 동일하게 코딩을 할 수 있다.

일반적으로 공통적으로 사용되는 속성들을 정의하거나, 개발 환경(prod/dev) 등을 구분하고자 할 때 주로 사용된다.

그 방법으로 properties 파일이나, YAML 파일, 환경변수 및 명령행 인수 등을 사용할 수 있으며, 

워낙 다양한 방법들이 있다보니 중복되거나 하는 속성 값들에는 PropertySource 우선 순위가 작용한다.


  1. ~/.spring-boot-devtools.properties (devtools가 활성화시)
  2. @TestPropertySource (테스트시)
  3. @SpringBootTest (테스트시)
  4. Command line 파라미터
  5. SPRING_APPLICATION_JSON 속성 (환경 변수 또는 시스템 속성에 포함 된 인라인 JSON).
  6. ServletConfig 초기화 파라미터
  7. ServletContext 초기화 파라미터
  8. java:comp/env JNDI 속성
  9. System.getProperties() (Java System 등록 정보)
  10. OS 환경 변수
  11. RandomValuePropertySource (random.* 속성으로 랜덤값을 삽입할 때 유용)
  12. jar 외부의 프로필 별 속성(application-{profile}.properties 및 YAML 변형)
  13. jar 내부의 프로필 별 속성(application-{profile}.properties 및 YAML 변형)
  14. jar 외부의 속성 ( application.properties 및 YAML 변형)
  15. jar 내부의 속성 ( application.properties 및 YAML 변형)
  16. @Configuration 클래스의 @PropertySource
  17. SpringApplication.setDefaultProperties()


많기도 하여라. 나름이겠지만 사실상 사용하는건 @SpringBootTestapplication-{profile}.properties, @PropertySource 정도가 아닐까.

일반적으로 다음과 같은 방식으로 properties 파일을 작성하여 속성을 정의한다.


spring.profiles.active=dev,hsqldb

my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.uuid=${random.uuid}
my.number.less.than.ten=${random.int(10)}
my.number.in.range=${random.int[1024,65536]}

app.name=MyApp
app.description=${app.name} is a Spring Boot application
cs


Spring Profiles 는 어플리케이션 구성의 일부를 분리하여 특정 환경에서만 사용할 수 있게 한다. 

@Component 나 @Configuration 은 @Profile 으로 표시되어 로드될 상황을 분리할 수 있다.


@Configuration
@Profile("production")
public class ProductionConfiguration {
    // ...
}
cs


나는 주로 YAML 보다는 properties 를 사용하므로 YAML 에 관련된 내용은 생략하겠다. 

properties 와 동일한 정의가 가능하지만, @PropertySource 로 값을 가져올 수 없다는 차이점 정도?


이렇게 설정된 속성들은 @Value("${property}") 어노테이션을 사용하여 값을 가져올 수 있지만, 여러 속성을 작성하거나 계층적으로 그룹화 된 여러 property 들을 관리할 때는 @Value("${property}") 보다는 @ConfigurationProperties 로 설정하여 바인딩 하는 것이 좋다.




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret