[Spring Boot] application.properties 커스텀 property 추가하기(@ConfigurationProperties)

GilLog·2021년 8월 24일
1

Spring

목록 보기
19/22

#import

스프링 부트 커스텀 설정 프로퍼티 클래스 사용하기[Java Can Do IT]


application.properties

Spring Bootapplication.properties를 이용한 프로젝트 환경 설정을 제공한다.

Spring Boot에서 기본적으로 제공하거나, Dependency에서 제공하는 Property에도,

개발자가 직접 CustomizeProperty 역시 설정 가능하다.

서버에서 사용하는 Public Key값을 관리한다거나,

서버 마다 사용하는 로직 변수 값들application.properties를 활용해서 각기 다르게 설정할 수도 있다.


@ConfigurationProperties Class 생성

@ConfigurationProperties를 활용하면 손 쉽게 Spring Bootapplication.properties에서 사용할 Property Class를 생성할 수 있다.

아래 코드를 살펴보자.

import org.springframework.boot.context.properties.ConfigurationProperties;

import lombok.Getter;
import lombok.Setter;

@ConfigurationProperties(prefix = "eval.publickey")
@Getter
@Setter
public class PublicKeyConfig {
    private String publicKey;
}

@ConfigurationProperties를 선언한 Class에서는,

application.properties에서 사용할 Property의 Getter, Setter 부분을 작성해주기만 하면 된다.

Property Mapping

@ConfigurationProperties를 선언한 Class에서,

field로 선언한 변수는 application.properties에서 다양하게 매핑 가능하다.

기본 적으로는 아래와 같이 매핑 된다.

  • prefix + "." + setter Property의 이름
    [EX] eval.publickey.publicKey

만약 setterProperty 이름 중간에 대문자가 포함되어 있다면,

아래와 같이도 매핑할 수 있다.

eval.publickey.publicKey
eval.publickey.public-key
eval.publickey.public_key
EVAL_PUBLICKEY_PUBLIC_KEY

이제 생성한 @ConfigurationProperties Class를 Bean으로 등록해주면 된다.


Bean 등록 하기

@ConfigurationProperties Class는 아래 두 가지 방법 중 하나로 Bean으로 등록해주면 된다.

  • @EnableConfigurationProperties
  • @Component

@EnableConfigurationProperties로 등록

@EnableConfigurationProperties로 Bean 등록 하려면 아래와 같이,

Spring Boot Application Class@EnableConfigurationProperties(PublicKeyConfig.class)와 같이 선언해주면 된다.

import com.bng.ddaja.common.config.PublicKeyConfig;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;

@SpringBootApplication
@EnableConfigurationProperties(PublicKeyConfig.class)
public class DdajaApplication {
	public static void main(String[] args) {
		SpringApplication.run(DdajaApplication.class, args);
	}
}

여기서 @EnableConfigurationProperties안의 PublicKeyConfig.class는,

아까전 작성한 @ConfigurationProperties Annotation이 적용된 Class이다.

@EnableConfigurationProperties Annotation은,

해당 Class를 Bean으로 등록하고 Property 값을 할당해준다.

@Component 등록

@Component Annotation으로 등록하는 방법은,

아까전 @ConfigurationProperties Class에,
@Component Annotation을 작성
해주기만 하면 된다.


import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Component
@ConfigurationProperties(prefix = "eval.publickey")
public class PublicKeyConfig {
    private String publicKey;
}

Spring Boot @SpringBootApplication이 선언된 Class 하위에,

@Component Type의 Annotation이 붙은 Class는,

자동으로 Bean으로 등록해주기 때문에 손쉽게 사용 가능하다.


실제 사용해보기

@ConfigurationProperties Annotation Class를 작성Bean 등록을 해주고,

이제 아래와 application.properties에 원하는 Property를 설정하면,

아래와 같이 Dependency Injection을 통해,

@ConfigurationProperties Annotation Class 사용을 원하는 곳에 의존성을 주입해주면,

@CrossOrigin(origins = "*", allowedHeaders = "*")
@AllArgsConstructor
@RequestMapping("test")
@RestController
@Slf4j
public class TestController {
    
    private PublicKeyConfig publicKeyConfig;

    @GetMapping("/publicKey")
    public String testPublicKeyProperty() {
        return publicKeyConfig.getPublicKey();
    }
}

손쉽게 사용할 수 있다.

profile
🚀 기록보단 길록을 20.10 ~ 22.02 ⭐ Move To : https://gil-log.github.io/

0개의 댓글