궁금한 점
•
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 하지 않았다.
•
찾아서 다행이다!