๊ถ๊ธํ ์
โข
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 ํ์ง ์์๋ค.
โข
์ฐพ์์ ๋คํ์ด๋ค!