개요
스프링부트 JPA 를 사용하기 위해서 DB 를 MYSQL 로 설정하고자 아래와 같이 application.yml 을 작성하였다. 이후에 엔티티를 작성하고 테스트코드를 돌려보니 에러가 발생했다.
spring:
datasource:
url: jdbc:mysql://localhost:3306/study
username: root
password: rootpass
jpa:
database-platform: org.hibernate.dialect.MySQLDialect
hibernate:
ddl-auto: update
generate-ddl: true
show-sql: true
에러내용
java.sql.SQLException: The server time zone value 'blahblahblahblahblah~~' is
unrecognized or represents more than one time zone. You must configure either
the server or JDBC driver (via the serverTimezone configuration property)
to use a more specifc time zone value if you want to utilize time zone support.
서버 타임존을 인식하지 못하거나 둘 이상의 타임존이 존재하기 때문에 SQLException 이 일어나고 있다. 이 때문에 JDBC 드라이버에서 서버 타임존을 설정해두어야 한다. 상세히 말하면, JDBC 드라이버를 UTC 시간대로 설정하여야 한다. 그래서 applicatoin.yml 을 아래와 같이 수정하니 해결되었다.
useTimezone=true&serverTimezon=UTC 을 덧 붙여주었다.
spring:
datasource:
url: jdbc:mysql://localhost:3306/study?useTimezone=true&serverTimezone=UTC
username: root
password: rootpass
원인
MySQL 서버는 Preleptic Gregorian Calendar 를 내부적으로 사용하고 있다. 하지만 java 단에서 JDBC 를 통해 MySQL 과 연결을 시도하려는 경우, java.sql.Date 를 이용하게 되는데 이건 Non-Preleptic Gregorian 이다. 이와 같은 java 와 db 사이의 시간대 불일치 때문에 명시적으로 UTC 타임존(UTC :: 세계표준시) 을 사용할 수 있도록 설정하는 것이다.
reference
https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-usagenotes-known-issues-limitations.html
'ErrorMarking' 카테고리의 다른 글
20200125 [error] 인텔리제이 .iml 파일 삭제 이후 문제. (0) | 2020.01.25 |
---|---|
20191226 [error] nginx 관련 에러 (0) | 2019.12.26 |
20191215 [error] No qualifying bean of type ~~ at least 1 bean which qualifies as autowire candidate (0) | 2019.12.15 |
20190904 [error] CommandAcceptanceException (0) | 2019.09.05 |
20190816 그만 만나고 싶다. 이런 에러들. (0) | 2019.08.16 |