@AutoConfiguration
관련한 글을 작성중에 재활용 가능한 예제를 작성하고자 Multi DataSource
를 작성하고 있었다. 그러기 위해 나는 가장 믿으직스러운 spring-boot-autoconfigure
에서 사용하는 로직을 사용하고자 하였다. 그리하여 디버깅을 시작해보았다. 그러던중... 이해가 되지 않는 부분을 맞이하였다. 바로 다음 부분이다.
@Bean
@ConfigurationProperties(prefix = "spring.datasource.hikari")
HikariDataSource dataSource(DataSourceProperties properties, JdbcConnectionDetails connectionDetails) {
HikariDataSource dataSource = createDataSource(connectionDetails, HikariDataSource.class,
properties.getClassLoader());
if (StringUtils.hasText(properties.getName())) {
dataSource.setPoolName(properties.getName());
}
return dataSource;
}
spring:
application:
name: sample
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
username: root
password: root
hikari:
maximum-pool-size: 5
생성될 DataSource
에 application.yml
에 정의한 maximum-pool-size
가 적용되지 않는 것을 확인했다.
분명 @ConfigurationProperties(prefix = "spring.datasource.hikari")
를 통해서 HikariConfig.maxPoolSize
를 가져올 수 있을 것이라고 생각했으나 아니였다.
과연 Hikari
설정들이 정말 설정이 안되고 있는 것일까 라는 의문점이 들었다. 그러기에는 너무나 중요한 설정이여서 다른 선배님들이 가만히 두지 않았을 것이라는 생각이 들어 로그를 레벨을 수정하여 확인해 보았다.
로그를 확인해보니 application.yml
에 설정한 값이 정상적으로 설정되어 있는 것을 확인해 볼 수 있었다.
나의 착각이였던 것이다. 일반적인 @ConfigurationProperties
의 경우는 JavaBean Properties Binding
방식을 통해서 Class
레벨에 적용하여 Bean
으로 이미 등록된 상태에서 사용 가능하였다.
하지만 이번 방식은 @Bean
과 @ConfigurationProperties
를 같이 사용한 방식으로 Third-party Configuration
방식이였다. 생성된 객체를 Bean
으로 동록하는 방식으로 DataSource
생성이후에 application.yml
에 값들이 추후로 설정되는 것이였다.
아직도 기본적인 것들에 대해 모르는 부분들이 많다는 것을 느끼고 부끄러워지는 시간이였다....