웹 개발

Spring Boot에서 MySQL JDBC Timezone 설정

노루아부지 2020. 12. 26. 21:12

때때로 MySQL에 날짜를 저장할 때 Database의 날짜가 시스템이나 JVM과 다르다는 것을 알게 됩니다. 이런 경우에는 Timezone을 설정하면 됩니다.

 

 

 

 

방법 1. URL parameter로 Timezone 설정

MySQL은 기본적으로 useLegacyDatetimeCode=true를 사용합니다. Timezone을 변경하려면 이 옵션을 false로 변경해야 합니다. 또한 serverTimezone 옵션도 추가해야 합니다.

 

아래와 같이 application.properties에 적어줍니다.

spring.datasource.url=jdbc:mysql://loalhost:3306/test
                            ?serverTimezone=UTC
                            &useLegacyDatetimeCode=false
spring.datasource.username=root
spring.datasource.password=test

 

 

 

방법 2. Spring Boot 옵션

 

JPA를 사용할 경우 아래와 같이 옵션을 적용할 수 있습니다.

단, 방법 1에서 사용했던 useLegacyDatetimeCode=false 옵션도 적용해야 합니다.

 

spring.jpa.properties.hibernate.jdbc.time_zone=UTC

 

 

 

방법 3. JVM 기본 시간대 변경

 

아래와 같이 JVM 기본 시간대를 변경할 수 있으나, 이 방법 또한 useLegacyDatetimeCode=false 옵션도 적용해야 합니다.

@PostConstruct는 Bean이 완전히 초기화 된 후, 단 한번만 호출되는 메소드 입니다.

 

@PostConstruct
void started() {
  TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}

 

 

 

방법 4. Java 실행 옵션으로 timezone 적용

 

아래와 같이 jar를 실행 할 때 -Duser.timezone 옵션으로 timezone을 변경할 수 있습니다.

단, 이 경우에는 매번 지정해줘야 하기 때문에 번거로움이 있을 수 있습니다.

java -jar -Duser.timezone=Asia/Seoul test.jar

 

 

 

 

 

reference

www.baeldung.com/mysql-jdbc-timezone-spring-boot

728x90
loading