ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 외부 설정 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
Designed by Tistory.