사전 조건
application.yaml 설정
dependency 설정
spring-boot-configuration-processor annotationProcessor 를 추가해줘야한다.
Java
순서
1. ConfigurationProperties 등록 on ConfigClass
@Getter
@RequiredArgsConstructor
@ConfigurationProperties(prefix = "server")
public class ServerConfig {
private final String port;
private final String ip;
private final String hostname;
}
2. ConfigurationPropertiesScan 등록 on main
@SpringBootApplication
@RequiredArgsConstructor
@ConfigurationPropertiesScan
public class JavaGrpcServerApplication {
private final PingController pingController;
public static void main(String[] args) {
SpringApplication.run(JavaGrpcServerApplication.class, args);
}
}
3. 생성자 주입받아서 사용
@RequiredArgsConstructor
@GrpcGlobalServerInterceptor
public class RequestInterceptor implements ServerInterceptor {
private final ServerConfig serverConfig;
// 아래서 사용
}
캐밥 케이스 dd-aa-zz 를 camelCase 로 java 에서 자동으로 받음 .
Kotlin
1. yaml 에서 읽어올 클래스 지정
// @ConstructorBinding 이 자동으로 지정되어 `application.yaml` property 를 생성자로 자동 주입받는다.
@ConfigurationProperties(prefix = "")
data class YamlConfig(
val environment: String,
val name: String,
val enabled: Boolean
)
@Configuration annotation 이 필요없다.
내부에서 메소드로 수동 빈 등록을 하는 과정이 없기 때문이다.
2. @ConfigurationPropertiesScan 등록 on main
@SpringBootApplication
// @ConfigurationProperties 가 붙은 어노테이션 클래스 설정 정보를 모두 읽어들인다.
@ConfigurationPropertiesScan // 패키지별 명시 가능
class TestApplication(
//
private val yamlConfig: YamlConfig
) {
private val logger = LoggerFactory.getLogger(this.javaClass.simpleName)
init {
printEnv()
}
private fun printEnv() {
logger.info("name: ${this.yamlConfig.name}")
logger.info("environment: ${this.yamlConfig.environment}")
logger.info("enabled: ${this.yamlConfig.enabled}")
}
}
fun main(args: Array<String>) {
runApplication<TestApplication>(*args)
}
p.s.
기존에는 @ConfigurationProperties 가 setter 주입이고
@ConstructorBinding 어노테이션으로 단일 생성자를 갖는 클래스를 생성자 주입해줄 수 있다.
@ConstructorBinding
'JVM > Spring' 카테고리의 다른 글
[Spring] Servlet Container, Servlet (0) | 2023.03.19 |
---|---|
[Spring] logback-spring.xml (0) | 2023.02.21 |
[SpringBoot] Naming methods in each layer (0) | 2023.02.09 |
[Spring] Library 살펴보기 및 스프링 환경설정 (0) | 2022.12.12 |
[Spring] Bean Scope (0) | 2022.12.07 |