spring hikaricp datasource properties

Dae-Hwa Jeong·2024년 1월 25일
0

미세팁

목록 보기
4/4

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 와 같은 에러가 발생한다.

생각나는 방법은 세 가지 정도 있는데,

  1. 데이터 소스를 직접 만들어준다

    생성자에 config를 넣어주지 않았을 경우 fastPathPool에 등록 되지 않고 당연히 seal()도 동작하지 않는다.
    대신 getConnection()을 할때 sealed = true로 변경된다.
    따라서 데이터 소스를 만들때 프로퍼티를 넣어주면 된다.

    HikariDataSource().apply{
    	addDataSourceProperty("zeroDateTimeBehavior", "convertToNull")
    }
  2. HikariConfig를 동적으로 받아온다면

    1. DataSource로 만들기 전에 넣어준다.

          @ConfigurationProperties(prefix = "spring.datasource.asdf")
          fun asdfDataSourceProperties(): HikariConfig = HikariConfig().apply {
              addDataSourceConfig("zeroDateTimeBehavior", "convertToNull")
          })
    2. 그냥 yml에 작성해버린다

      # ...
        driver-class-name: ...
        username: ...
        password: ...
        data-source-properties:
          zeroDateTimeBehavior: convertToNull
        ...

아주 간단하게 테스트 해보자면

JdbcTemplate(asdfDataSource).queryForMap(
    // zeroDateTimeBehavior 적용이 되지 않으면 에러 발생
    "SELECT date('0000-00-00 00:00:00')" 
)
profile
대화로그

0개의 댓글