스프링 부트 커스텀 설정 프로퍼티 클래스 사용하기[Java Can Do IT]
Spring Boot는 application.properties를 이용한 프로젝트 환경 설정을 제공한다.

Spring Boot에서 기본적으로 제공하거나, 각 Dependency에서 제공하는 Property 외에도,
개발자가 직접 Customize한 Property 역시 설정 가능하다.
서버에서 사용하는 Public Key값을 관리한다거나,
서버 마다 사용하는 로직 변수 값들을 application.properties를 활용해서 각기 다르게 설정할 수도 있다.
@ConfigurationProperties를 활용하면 손 쉽게 Spring Boot의 application.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 부분을 작성해주기만 하면 된다.
@ConfigurationProperties를 선언한 Class에서,
field로 선언한 변수는 application.properties에서 다양하게 매핑 가능하다.
기본 적으로는 아래와 같이 매핑 된다.
만약 setter의 Property 이름 중간에 대문자가 포함되어 있다면,
아래와 같이도 매핑할 수 있다.
eval.publickey.publicKey
eval.publickey.public-key
eval.publickey.public_key
EVAL_PUBLICKEY_PUBLIC_KEY
이제 생성한 @ConfigurationProperties Class를 Bean으로 등록해주면 된다.
@ConfigurationProperties Class는 아래 두 가지 방법 중 하나로 Bean으로 등록해주면 된다.
@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 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();
}
}

손쉽게 사용할 수 있다.