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)
항목 | 유효 값 | 필수 여부 | 설명 |
---|---|---|---|
driver | mysql | 필수 | R2DBC에서 발견해야 하는 드라이버입니다. |
host | 호스트 이름 또는 IP 주소 | 필수 | MySQL 데이터베이스 서버의 호스트입니다. |
unixSocket | Unix 도메인 소켓의 절대 경로 또는 상대 경로 | 필수 | Unix 도메인 소켓의 소켓 파일입니다. |
port | 65536 미만의 양수 정수 | 선택 사항, 기본값은 3306 | MySQL 데이터베이스 서버의 포트입니다. |
user | 유효한 MySQL 사용자 이름 | 필수 | MySQL 데이터베이스에 연결하려는 사용자입니다. |
password | 인쇄 가능한 문자열 | 선택 사항, 기본값은 비밀번호 없음 | MySQL 데이터베이스 사용자의 비밀번호입니다. |
database | 유효한 MySQL 데이터베이스 이름 | 선택 사항, 기본값은 데이터베이스를 초기화하지 않음 | MySQL 연결에서 사용하는 데이터베이스입니다. |
connectTimeout | 양수 지속 시간 | 선택 사항, 기본값은 타임아웃 없음 | TCP 연결 타임아웃입니다. |
socketTimeout | 양수 지속 시간 | 선택 사항, 기본값은 타임아웃 없음 | TCP 소켓 타임아웃입니다. |
serverZoneId | ZoneId의 ID | 선택 사항, 기본값은 연결 초기화 시 시간대 쿼리 | 서버 시간대 ID입니다. |
tcpKeepAlive | true 또는 false | 선택 사항, 기본값은 비활성화 | TCP KeepAlive를 제어합니다. |
tcpNoDelay | true 또는 false | 선택 사항, 기본값은 비활성화 | TCP NoDelay를 제어합니다. |
sslMode | SSL 모드의 값 | 선택 사항, 기본값은 호스팅 연결을 사용하는 경우 PREFERRED, Unix 도메인 소켓을 사용하는 경우 DISABLED | SSL 모드입니다. |
sslCA | PEM 형식의 로컬 파일의 경로 | sslMode가 VERIFY_CA 또는 VERIFY_IDENTITY인 경우 필수 | MySQL 데이터베이스 서버의 CA 인증서입니다. |
sslCert | PEM 형식의 로컬 파일의 경로 | sslkey가 있는 경우 필수 | 클라이언트의 SSL 인증서입니다. |
sslkey | PEM 형식의 로컬 파일의 경로 | sslCert가 있는 경우 필수 | 클라이언트의 SSL 키입니다. |
sslkeyPassword | DEX 파일의 유효한 비밀번호 | 선택 사항, 기본값은 sslkey에 비밀번호 없음 | 클라이언트 SSL 키의 비밀번호입니다. |
tlsVersion | TLS 버전의 값 목록 | 선택 사항, 기본값은 서버에서 자동으로 선택됨 | SSL에 대한 TLS 버전입니다. |
sslHostnameVerifier | HostnameVerifier | 선택 사항, 기본값은 RFC 표준 사용 | sslMode가 VERIFY_CA 이상인 경우에만 사용됩니다. |
sslContextBuilderCustomizer | SslContextBuilder 또는 SslContextBuilders의 함수 | sslMode가 DISABLED가 아닌 경우에만 사용됩니다. | 선택 사항, 기본값은 NO-OP 함수 |
zeroDateOption | zeroDateOption의 값 | 선택 사항, 기본값은 USE_NULL | "zero date" 처리를 나타내는 옵션입니다. |
autodetectExtensions | true 또는 false | 선택 사항, 기본값은 true | 확장 기능을 자동으로 감지합니다. |
useServerPrepareStatement | true, false 또는 Predicate<String> | 선택 사항, 기본값은 False | 자세한 내용은 참고 사항을 참조하세요. |