캐싱 했더니 ClassCastException이 발생한다.
java.lang.ClassCastException: com.example.demo.User cannot be cast to com.example.demo.User
??????????????
이해할 수 없는 에러 메시지였다.
앞뒤가 똑같은 클래스구만 왜 캐스팅이 안된다는 건지 의문이었다.
https://brunch.co.kr/@springboot/212
Spring Boot DevTools 클래스로더 이슈
- 스프링부트 관련 잡다한 기술 이야기 | "Spring Boot DevTools 클래스로더 이슈"라는 제목으로 글을 작성하였는데, 막상 글을 다 작성한 후 다시 읽어보니 너무 잡다한 내용이 되었다. 그래서, 이 글
brunch.co.kr
이 포스팅 덕분에 상황을 이해할 수 있었다.
직렬화/역직렬화에 사용되는 클래스 로더가 서로 달라서 같은 클래스임에도 불구하고 ClassCastException을 뱉어냈던 것.
RedisCacheManager를 커스터마이징 하느라RedisCacheConfiguration에서 클래스 로더를 주입받아 설정하는 부분이 빠진 채로 사용하고 있었던 것이다.
Redis Cache를 사용하고 있어서 간단히 역직렬화에 사용할 클래스 로더를 지정해줄 수 있었다.
private final ResourceLoader resourceLoader;
RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig(resourceLoader.getClassLoader());
RedisCacheManager 빈을 띄울 때 RedisCacheConfiguration을 이용해서 주입받은 클래스 로더를 넣어주면 문제 해결!
'software engineering > web' 카테고리의 다른 글
JPA Inheritance Mapping 하나의 테이블을 여러 엔티티로 분리하기 (0) | 2022.01.10 |
---|---|
JPA OneToOne Relationship (0) | 2022.01.10 |
Java의 File Path 상대경로 (0) | 2020.04.06 |
Spring 5.2, SpringBoot 2.2 Http Codec이 변경되었다. (0) | 2019.10.25 |
Java Garbage Collection (0) | 2019.10.21 |