공부/Spring
[스프링 인 액션] Chapter 5 구성 속성 사용하기
Lai_Khan
2022. 7. 3. 17:49
이 글은 크레이그 윌즈의 "스프링 인 액션(5판)"을 읽고 간략히 정리한 글이다.
Auto-Configuration 세부 조정
스프링 환경 추상화environment abstraction란 구성 가능한 모든 속성을 한 곳에서 관리하는 개념을 말한다.
다음같은 속성으로부터 원천 속성을 가져와서 앺르리케이션 컨텍스트 빈이 사용할 수 있게 해준다.
- JVM 시스템 속성
- 운영체제 환경변수
- 명령행 인자 command-line argument
- 애플리케이션 속성 구성 파일
*.xml, *.yml, *.properties 파일에 datasource, 서버, 로깅 등의 속성을 정의할 수 있다. (예시 ↓↓↓)
spring:
datasource:
jndi-name:
server:
port: 3000
ssl:
key-store: file://path/to/mykeys.jks
...
logging:
level:
root: WARN
org:
springframework:
security: DEBUG
우리의 Auto-Configuration 생성
@ConfigurationProperties 애노테이션을 사용해 특정 스프링 빈에 직접 지정한 property 값을 가져올 수 있다.
taco:
orders:
pageSize: 10
이렇게 속성을 설정해준뒤,
@Data
@Component
@ConfigurationProperties(prefix="taco.orders")
public class OrderProps {
private int pageSize = 20;
}
pageSize의 기본값은 20이지만 구성 속성값을 통해 이를 쉽게 변경할 수 있다.
프로파일 사용해서 구성
개발 환경과 프로덕션 환경에서 각기 다른 속성을 적용하고 싶다면 스프링 프로파일을 사용하면 된다.
.yml 이나 .properties 파일을 생성할 때 다음과 같이 생성하는 것이다.
application-{프로파일 이름}.yml, application-{프로파일 이름}.properties (ex. application-prod.yml)
또는 YAML에서만 가능한 방법으로 프로파일 특정 속성을 정의할 수도 있다.
logging:
level:
tacos: DEBUG
---
spring:
profiles: prod
datasources:
url: jdbc:mysql://localhost/tacocloud
username: tacouser
password: tacopassword
logging:
level:
tacos: WARN
또한 프로파일을 사용해 조건별로 빈을 생성할 수도 있다.
@Bean
@Profile("dev")
public CommandLineRunner dataLoader(IngredientRepository repo) {
...
}
---
@Bean
@Profile({"dev", "qa"})
public CommandLineRunner dataLoader(IngredientRepository repo) {
...
}
---
@Bean
@Profile("!prod")
public CommandLineRunner dataLoader(IngredientRepository repo) {
...
}