spring
webflux
r2dbc
R2DBC-MYSQL 사용 시 The server timezone is unknown ~ 문제 해결 방법

R2DBC-MYSQL 사용 시 The server timezone is unknown ~ 문제 해결 방법

2023-10-12T10:17:30.737+09:00  WARN 32432 --- [actor-tcp-nio-2] io.asyncer.r2dbc.mysql.MySqlConnection   : The server timezone is unknown <????α? ???>, trying to use system default timezone

java.time.DateTimeException: Invalid ID for region-based ZoneId, invalid format: ????α? ???
        at java.base/java.time.ZoneRegion.checkName(ZoneRegion.java:152) ~[na:na]
        at java.base/java.time.ZoneRegion.ofId(ZoneRegion.java:117) ~[na:na]

위와 같은 에러가 발생할 경우

serverZoneId 명시

저의 경우 별도의 properties 파일인 application-prod.yml 을 통하여 설정 중이라

해당 파일을 아래와 같이 수정하였습니다

application-prod.yml
  r2dbc:
    url: r2dbc:mysql://127.0.0.1:3306/gx_api_2?useUnicode=true&characterEncoding=utf-8&serverZoneId=UTC

jdbc를 사용해보신 분들은 일반적으로 serverTimeZone 을 사용하실텐대, r2dbc 의 경우 serverZoneId 를 사용해야합니다.

R2DBC-MYSQL Configuration items

r2dbc-mysql readme.md (opens in a new tab)

항목유효 값필수 여부설명
drivermysql필수R2DBC에서 발견해야 하는 드라이버입니다.
host호스트 이름 또는 IP 주소필수MySQL 데이터베이스 서버의 호스트입니다.
unixSocketUnix 도메인 소켓의 절대 경로 또는 상대 경로필수Unix 도메인 소켓의 소켓 파일입니다.
port65536 미만의 양수 정수선택 사항, 기본값은 3306MySQL 데이터베이스 서버의 포트입니다.
user유효한 MySQL 사용자 이름필수MySQL 데이터베이스에 연결하려는 사용자입니다.
password인쇄 가능한 문자열선택 사항, 기본값은 비밀번호 없음MySQL 데이터베이스 사용자의 비밀번호입니다.
database유효한 MySQL 데이터베이스 이름선택 사항, 기본값은 데이터베이스를 초기화하지 않음MySQL 연결에서 사용하는 데이터베이스입니다.
connectTimeout양수 지속 시간선택 사항, 기본값은 타임아웃 없음TCP 연결 타임아웃입니다.
socketTimeout양수 지속 시간선택 사항, 기본값은 타임아웃 없음TCP 소켓 타임아웃입니다.
serverZoneIdZoneId의 ID선택 사항, 기본값은 연결 초기화 시 시간대 쿼리서버 시간대 ID입니다.
tcpKeepAlivetrue 또는 false선택 사항, 기본값은 비활성화TCP KeepAlive를 제어합니다.
tcpNoDelaytrue 또는 false선택 사항, 기본값은 비활성화TCP NoDelay를 제어합니다.
sslModeSSL 모드의 값선택 사항, 기본값은 호스팅 연결을 사용하는 경우 PREFERRED, Unix 도메인 소켓을 사용하는 경우 DISABLEDSSL 모드입니다.
sslCAPEM 형식의 로컬 파일의 경로sslMode가 VERIFY_CA 또는 VERIFY_IDENTITY인 경우 필수MySQL 데이터베이스 서버의 CA 인증서입니다.
sslCertPEM 형식의 로컬 파일의 경로sslkey가 있는 경우 필수클라이언트의 SSL 인증서입니다.
sslkeyPEM 형식의 로컬 파일의 경로sslCert가 있는 경우 필수클라이언트의 SSL 키입니다.
sslkeyPasswordDEX 파일의 유효한 비밀번호선택 사항, 기본값은 sslkey에 비밀번호 없음클라이언트 SSL 키의 비밀번호입니다.
tlsVersionTLS 버전의 값 목록선택 사항, 기본값은 서버에서 자동으로 선택됨SSL에 대한 TLS 버전입니다.
sslHostnameVerifierHostnameVerifier선택 사항, 기본값은 RFC 표준 사용sslMode가 VERIFY_CA 이상인 경우에만 사용됩니다.
sslContextBuilderCustomizerSslContextBuilder 또는 SslContextBuilders의 함수sslMode가 DISABLED가 아닌 경우에만 사용됩니다.선택 사항, 기본값은 NO-OP 함수
zeroDateOptionzeroDateOption의 값선택 사항, 기본값은 USE_NULL"zero date" 처리를 나타내는 옵션입니다.
autodetectExtensionstrue 또는 false선택 사항, 기본값은 true확장 기능을 자동으로 감지합니다.
useServerPrepareStatementtrue, false 또는 Predicate<String>선택 사항, 기본값은 False자세한 내용은 참고 사항을 참조하세요.