티스토리 뷰

이번껀 spring boot 3 로 업그레이드할때 누구나 만날만한 이슈도 아니고, 어떻게 보면 그냥 내 실수이지만 비슷한 이슈를 마주할 수 있기에 적어놓는다.

 

기존 spring boot 2 애플리케이션에서 circuit breaker 로 resilience4j 를 사용하고 있었다면 spring boot 3 에 맞게 resilience4j 도 버전을 올려줘야한다. 다만 resilience4j 같은 경우 spring boot 버전에 최적화된 아티팩트를 제공하고 있어서 이 부분 이름도 변경해줘야 한다.

 

 spring boot 2  spring boot 3
 io.github.resilience4j:resilience4j-spring-boot2:${version}  io.github.resilience4j:resilience4j-spring-boot3:${version}

 

이건 어렵지 않으나 버전을 올려주고 애플리케이션 구동시 이런 에러를 만날 수 있다.

java.lang.ClassNotFoundException: io.github.resilience4j.core.functions.CheckedSupplier

 

클래스가 없다는 에러인데, 구체적인 클래스명은 상황마다 좀 다를 수 있다. 여튼 문제는 resilience4j 를 알맞게 최신화했는데 필요한 클래스가 없다는 에러가 발생한다는 것. 왜 클래스를 못 찾는걸까?

의존성 버전을 살펴보면 spring boot 3 로 올려주고, 현 시점 가장 최신버전인 2.2.0 으로 넣었음에도 1.7.0 을 사용하고 있는걸 알 수 있다.

 

이 이슈 때문에 그레이들 새로고침을 몇십번을 하고 로컬 리파지토리를 몇번을 지우고 했는지...

 

원인은 spring cloud 때문이었다. 혹시 위와 같은 이슈를 만난다면 spring cloud 를 사용하고 있는건 아닌지 확인해 본 후 spring cloud 버전을 올려주자. spring cloud 도 spring boot 의 각 버전에 맞는 릴리즈를 제공하고 있는데, 차근차근 하나씩 버전을 올리면서 아직 spring cloud 의 버전을 올리지 않았다면 구버전 spring cloud 의존성 때문에 resilience4j 의 구버전에 의존하게 된다. spring cloud 버전을 올려주면 해결된다.

 

spring boot 에 맞는 spring cloud 버전은 아래를 참고하면 된다.

https://spring.io/projects/spring-cloud

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함