url 뒤에 붙는 설정을 빼고 싶었음
HikariConfig()
내부에 프로퍼티가 전달 돼야 한다.
HikariDataSource(HikariConfig configuration)
생성자 사용 시 sealed = true
상태로 바뀜 (fastPathPool
로 생성하면서 등록 해버린다)
HikariDataSource
에서 내부 프로퍼티 맵에 직접 접근 시 변경은 되지만 적용은 안 되는 것으로 보임
직접 접근이 아니라 addDataSourceProperty
메소드 사용 시 sealed
체크를 하기 때문에 The configuration of the pool is sealed once started. Use HikariConfigMXBean for runtime changes
와 같은 에러가 발생한다.
생각나는 방법은 세 가지 정도 있는데,
데이터 소스를 직접 만들어준다
생성자에 config를 넣어주지 않았을 경우 fastPathPool
에 등록 되지 않고 당연히 seal()
도 동작하지 않는다.
대신 getConnection()
을 할때 sealed = true
로 변경된다.
따라서 데이터 소스를 만들때 프로퍼티를 넣어주면 된다.
HikariDataSource().apply{
addDataSourceProperty("zeroDateTimeBehavior", "convertToNull")
}
HikariConfig를 동적으로 받아온다면
DataSource로 만들기 전에 넣어준다.
@ConfigurationProperties(prefix = "spring.datasource.asdf")
fun asdfDataSourceProperties(): HikariConfig = HikariConfig().apply {
addDataSourceConfig("zeroDateTimeBehavior", "convertToNull")
})
그냥 yml에 작성해버린다
# ...
driver-class-name: ...
username: ...
password: ...
data-source-properties:
zeroDateTimeBehavior: convertToNull
...
아주 간단하게 테스트 해보자면
JdbcTemplate(asdfDataSource).queryForMap(
// zeroDateTimeBehavior 적용이 되지 않으면 에러 발생
"SELECT date('0000-00-00 00:00:00')"
)