일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- java
- java list
- spring3 spring2 traceid
- @FunctionalInterface
- Spring JPA
- asynccustomautoconfiguration
- HashMap
- ResponseBody
- kotlin
- micrometer tracing
- EnableWebMvc
- spring MVC
- awssecretsmanagerpropertysources
- SpringMVC
- spring
- CompletableFuture
- java.util.list
- traceId
- DeferredImportSelector
- elasticsearch
- Spring Boot
- b3-propagation
- aws secretmanager
- asyncconfigurer
- traceasynccustomautoconfiguration
- java lambda
- map
- jpa
- list
- Sleuth
- Today
- Total
du.study기록공간
[Mybatis] Driver에 따라 DATETIME을 String으로 받는경우의 DateTimeFormatter 차이 본문
이 글은 driverClassName을 'com.mysql.jdbc.Driver'에서 'software.aws.rds.jdbc.mysql.Driver'로 바꾸는 과정에 발생된 이슈를 작성하고자 합니다.
우선 이슈가 발생된 과정을 정리해보면 다음과 같습니다.
1. driverClassName 변경 'com.mysql.jdbc.Driver' -> 'software.aws.rds.jdbc.mysql.Driver'
2. DATETIME 필드를 mybatis를 통해서 String으로 리턴하는 상태.
3. 로직상에서 String으로 받은 값을 아래 코드를 통해서 변환
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
LocalDateTime updatedAt = LocalDateTime.parse(updateDate, format);
해당 과정에서 포멧 에러가 발생했고, 이를 확인해본결과 아래와 같이 동작하고있었습니다.
1. software.aws.rds.jdbc.mysql.Driver 사용할때
DATETIME 조회후, software.aws.rds.jdbc.mysql.shading.com.mysql.cj.protocol.InternalTime 변환
- toString 과정에서 아래 로직을 거치기에 yyyy-MM-dd HH:mm:ss 형식으로 변환
- nanoSecond를 저장하지 않는 상태이기에 .S가 사라졌고, 포멧 에러가 발생했습니다.
(InternalTime.class)
@Override
public String toString() {
if (this.nanos > 0) {
return String.format("%02d:%02d:%02d.%s", this.hours, this.minutes, this.seconds, TimeUtil.formatNanos(this.nanos, this.scale, false));
}
return String.format("%02d:%02d:%02d", this.hours, this.minutes, this.seconds);
}
2. com.mysql.jdbc.Driver 사용할때.
DATETIME 조회후 java.sql.Timestamp 로 변환
- toString 과정에서 아래 과정을 거치기에 yyyy-MM-dd HH:mmss.S 로 변환
해당 과정에서는 반드시 나노세컨드가 들어가는 상태였습니다.
if (nanos == 0) {
nanosString = "0";
} else {
nanosString = Integer.toString(nanos);
.....
timestampBuf.append(".");
timestampBuf.append(nanosString);
return (timestampBuf.toString());
해당 차이로 인하여 Driver를 변경하자마자 테스트 과정에서 format에러가 발생했고 수정작업을 진행했습니다.
'스프링' 카테고리의 다른 글
AWS Secrets Manager + Srping boot 적용하기 (0) | 2024.08.23 |
---|---|
Spring version 3.x 와 2.x 간의 traceId 연동 (0) | 2024.05.28 |
spring sleuth Executor를 bean으로 생성했을때 traceId가 공유되는 방식 (1) | 2022.11.10 |
spring + h2환경에서 JPA native query를 사용했을때 맞이한 문제점 (0) | 2022.03.14 |
Spring controller response when first char lowerCase and next upperCase (0) | 2021.08.15 |