반응형
프로퍼티 우선순위
- 유저 홈 디렉토리에 있는 spring-boot-dev-tools.properties
- 테스트에 있는 @TestPropertySource
- @SpringBootTest 애노테이션의 properties 애트리뷰트
- 커맨드 라인 아규먼트
- SPRING_APPLICATION_JSON (환경 변수 또는 시스템 프로티) 에 들어있는 프로퍼티
- ServletConfig 파라미터
- ServletContext 파라미터
- java:comp/env JNDI 애트리뷰트
- System.getProperties() 자바 시스템 프로퍼티
- OS 환경 변수
- RandomValuePropertySource
- JAR 밖에 있는 특정 프로파일용 application properties
- JAR 안에 있는 특정 프로파일용 application properties
- JAR 밖에 있는 application properties
- JAR 안에 있는 application properties
- @PropertySource
- 기본 프로퍼티 (SpringApplication.setDefaultProperties)
application.properties 우선순위
=> 높은게 낮은걸 덮어 씀
- file:./config/ (실행 디렉토리 하위에 구성된 config 디렉토리)
- file:./ (실행 디렉토리)
- classpath:/config/ (클래스패스의 /config 패키지)
- classpath:/ (루트 클래스 패스)
프로파일 관련
애플리케이션 실행시 설정한 spring.profiles.active
속성에 따라 application-{profile}.properties
의 이름을 사용할 수 있다.
Type-safe properties 타입 세이프 프로퍼티 @ConfigurationProperties
- 여러 프로퍼티를 묶어서 읽어올 수 있음
- 빈으로 등록해서 다른 빈에 주입할 수 있음
- @EnableConfigurationProperties
- @Component
- @Bean
계층데이터나 다수의 property를 사용하게되면 @Value("${property}")
방식은 복잡해 질 수 있다.
Spring Boot는 강한 Typed Bean을 사용한 property관리 방식을 제공한다.
예제
1. application.properties
application.properties 아래 내용을 사용하고 싶을 때
corn.name = sunghyun
corn.howLong = 50
@ConfigurationProperties
Spring Boot properties를 정의 하기 위한 Annotation
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ConfigurationProperties {
@AliasFor("prefix")
String value() default "";
@AliasFor("value")
String prefix() default "";
boolean ignoreInvalidFields() default false;
boolean ignoreNestedProperties() default false;
boolean ignoreUnknownFields() default true;
@Deprecated
boolean exceptionIfInvalid() default true;
}
3. @ConfigurationProperties 설정
JSR-303 표준을 지원 (hibernate-validator)
spring-boot-starter-web에 포함되어 있음
@ConfigurationProperties("corn")
@Validated
public class CornProperties {
@NotNull
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
...
}
3. Configuration 설정
@Configuration
@EnableConfigurationProperties(CornProperties.class)
public class CornConfiguration {
@Bean
@ConditionalOnMissingBean
public Corn corn(CornProperties cornProperties){
Corn corn = new Corn();
corn.setName(cornProperties.getName());
corn.setAge(cornProperties.getAge());
return corn;
}
}
반응형
'프로그래밍 노트 > SPRING BOOT' 카테고리의 다른 글
Validation 알아보기_2(Spring Validation) (0) | 2021.01.09 |
---|---|
Validation 알아보기_1(Hibernate Validator) (0) | 2021.01.09 |
@Conditional, @ConditionalOnXXX (0) | 2019.11.18 |
[Spring Boot] Custom한 배너를 만들어보자! (0) | 2019.11.05 |
[Spring Boot] freemarker 설정하기 (0) | 2019.11.05 |