@Bean @ConfigurationProperties를 같이 사용한다면?!?

YouMakeMeSmile·2024년 11월 30일
0
post-thumbnail

@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


생성될 DataSourceapplication.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에 값들이 추후로 설정되는 것이였다.


아직도 기본적인 것들에 대해 모르는 부분들이 많다는 것을 느끼고 부끄러워지는 시간이였다....

profile
어느새 7년차 중니어 백엔드 개발자 입니다.

0개의 댓글