-
외부 설정 2부백기선(인프런 강의)/스프링 부트 개념과 활용 2020. 4. 13. 22:10반응형
@ConfigurationProperties
properties이 아래와같이 시작을 하면 이것을 묶어서 Bean으로 등록이 가능하다.
properties의 값은 기본적으로 문자열이다.
Properties @ConfigurationProperties 을 붙여주고 key값을 적어준다.(key값은 properties에 만들어둔 jinseok)
그리고 @Component를 붙여 Bean으로 등록해주고 아래와같이 getter, setter를 만들어준다.
@Component @ConfigurationProperties("jinseok") public class JinseokProperties { String name; int age; String fullName; 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; } public String getFullName() { return fullName; } public void setFullName(String fullName) { this.fullName = fullName; } }
위와같이 만들게 되면
위와같이 경고 표시가 발생이되는데 이는 의존성이 추가되지 않았다고 나온다.
그래서 아래와 같이 pom.xml에 의존성을 추가하라고 한다.
경고 표시 화면 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> spring-boot-configuration-processor </artifactId> <optional>true</optional> </dependency>
위와같이 만들게 되면 @ConfigurationProperties을 처리하는 애가 멤버 변수에 값을 바인딩 받을 수 있는 상태로 만들게 된 것이다.
이것을 사용할라면 main가 들어가있는 class에 아래와 같이 처리해야 한다.
@EnableConfigurationProperties 어노테이션을 사용하여 상요할 프로퍼티 클래스를 값으로 줘서 사용해야된다. 이렇게 작성을하면 Bean으로 등록해주고 @ConfigurationProperties도 처리해 준다.
@SpringBootApplication @EnableConfigurationProperties(JinseokProperties.class) public class SpringBootStudyApplication { public static void main(String[] args) { SpringApplication app = new SpringApplication(SpringBootStudyApplication.class); app.addListeners(new SampleListener()); app.run(args); } }
하지만 스프링 부트에서는 @ConfigurationProperties 사용안해도됨(자동으로 등록되어있기 때문)
@Component public class SampleRunner implements ApplicationRunner{ @Autowired JinseokProperties jinseokProperties; @Override public void run(ApplicationArguments args) throws Exception { System.out.println("====================================="); System.out.println(jinseokProperties.getName()); System.out.println(jinseokProperties.getAge()); System.out.println(jinseokProperties.getFullName()); System.out.println("====================================="); } }
third-party configuration
properties가 애플리케이션에 있지 않고, jar파일 또는 다른 곳에 있는 경우 클래스위에 @Component를 붙여 Bean으로 만들어 줄 수 없다.
이 때는 아래와 같이 @Bean (개발자가 제어를 하지 못하는 외부라이브러리를 Bean으로 등록) 어노테이션에 @ConfigurationProperties("value") 을 사용할 수 있다.
@SpringBootApplication public class SpringBootStudyApplication { @ConfigurationProperties("server") @Bean public ServerProperties serverproperties() { return new ServerProperties(); } public static void main(String[] args) { SpringApplication app = new SpringApplication(SpringBootStudyApplication.class); app.addListeners(new SampleListener()); app.run(args); } }
@Validated
프로퍼티 값 유효성 검사
properties의 값은 기본적으로 문자열
@Validated을 붙여주면 아래와같이 아래와같이 @NotEmpty, @Size등 어노테이션을 이용하여 유효성 체크를 할 수 있다.
@Value
SpEL은 사용할 수 있으나,
- 여러 프로퍼티를 묶어서 읽는 기능
- 빈으로 등록해서 다른빈에 주입
- @EnableConfigurationProperties
- @Component
- @Bean
- 융통선있는 바인딩
- conext-path(케밥)
- context_path(언더스코어)
- contextPath(캐멀)
- CONTEXTPATH
- 프로퍼티타입 컨버전
- DurationUnit
- 프로퍼티 값검증
- @Validation
- JSR-303 (@NotNull)
- 메타정보생성
위의 기능들을 사용할 수 없다.
결론
@Value 어노테이션으로 프로퍼티 값을 쓰는 것보다, value값으로 프로퍼티를 구분하여, 클래스를 만들어 @ConfigurationProperties 어노테이션을 사용하여 프로퍼티 값을 사용하는 것이 매핑도 유연하게 할 수 있다는 장점이 있다.
반응형'백기선(인프런 강의) > 스프링 부트 개념과 활용' 카테고리의 다른 글
스프링 부트 기본 로거 설정 (0) 2020.04.16 프로파일 (0) 2020.04.14 외부 설정 1부 (0) 2020.04.13 SpringApplication (0) 2020.04.10 독립적으로 실행 가능한 JAR (0) 2020.04.09