Search
🌱

@ConfigurationProperties 는 언제 적용될까

궁금한 점

HikariConfig 를 내가 설정한 내용으로 적용하기 위해 빈으로 등록하고자 메서드에 @Bean 으로 등록하려고 하였다.
@ConfigurationProperties 로 내가 yaml 파일에 적은 내용으로 하려고 하였다.
그런데 이상하게 내가 한 게 되지 않았다.
그래서 잘 동작하는 코드를 가져와서 디버그를 찍어보았다.
빈을 생성할 때에는 설정 내용이 적용되지는 않았다.

과정

Config

new HikariConfig() 로 return 하였다.

AbstractAutowireCapableBeanFactory

L:414 applyBeanPostProcessorsBeforeInitialization 메서드
등록된 beanPostProcessor 들을 반복 돌면서 post processing 한다.
17개가 등록되어있다.

ConfigurationPropertiesBindingPostProcessor

다른 beanPostProcessor 들은 다른 문제없이 기존의 HikariConfig(설정이 저장이 안된)가 반환된다.
그러다가 ApplicationContextAwareProcessor 에서 postProcessing 하니 BoundConfigurationProperties 로 바뀌었다.
BoundConfigurationProperties 는 아마 내가 설정한 내용인듯
내일 공부할 거
처음 bean 이 HikariConfig 일 때는 ConfigurationPropertiesBindingPostProcessor 를 거치면 BoundConfigurationProperties 가 된다.
BoundConfigurationProperties 가 다시 17개를 다시 돈다.
ConfigurationPropertiesBindingPostProcessor$postProcessBeforeInitialization 에서 bind 할 때 BoundConfigurationProperties 로 다시 돌기 시작한다.

JavaBeanBinder

L:82 bind 에서 함
타겟(HikariConfig)의 field 를 돌면서 바인딩 할 프로퍼티들 찾아서 바인딩

문제 해결

진짜 설정 값을 찾는 부분은 Binder$findProperty(L:441)
source 들을 돌면서(map 등등이 있다) 알맞는 소스로 값을 할당한다.
아니면 yml을 source 로 해서 찾는다.
문제가 뭐였냐면 멀티 모듈에서 해당 yaml 파일을 import 하지 않았다.
찾아서 다행이다!