한번에 넘어가려다 잘 안 돼서 단계별로 수정
2024-05월 기준 최신버전
io.spring.dependency-management
1.0.15.RELEASE
로 버전 업
(https://docs.spring.io/spring-boot/docs/2.7.18/reference/html/dependency-versions.html)
mysql:mysql-connector-java
-> com.mysql:mysql-connector-j
변경부트 3부터 java 17이 최소버전이기 때문에 미리 버전업 후 테스트
### Error querying database. Cause: java.lang.reflect.InaccessibleObjectException: Unable to make public boolean java.util.Arrays$ArrayList.contains(java.lang.Object) accessible: module java.base does not "opens java.util" to unnamed module @a4102b8
### Cause: java.lang.reflect.InaccessibleObjectException: Unable to make public boolean java.util.Arrays$ArrayList.contains(java.lang.Object) accessible: module java.base does not "opens java.util" to unnamed module @a4102b8
에러 발생
https://github.com/mybatis/mybatis-3/issues/2383#issuecomment-971649861
That error may occur if you write <if test="x.isEmpty()">.
Try <if test="x.empty"> or <if test="x.isEmpty"> instead.
따라해봐도 되지 않는다.
OGNL 버전 문제라고 한다(mybatis 3.5.10 부터 클리어)
원래 Apache commons 프로젝트였는데, 관리가 되고 있지 않는 듯 하다.
이런 프로젝트들을 orphan software라는 곳에서 관리중...
Home for projects that lost their maintainers 라고 적혀있다.
- OGNL? https://jehuipark.github.io/java/mybatis_ognl 이게 읽기 쉬웠다
그래서 mybatis-spring-boot-starter
2.3.x로 버전 업
io.spring.dependency-management
1.1.x
로 업그레이드
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide
RMI 사용 시 대안을 찾아야 한다(현재 micrometer + actuator 사용 중).
httpClient4 -> httpClient5로 변경
org.apache.httpcomponents:httpclient
-> org.apache.httpcomponents.client5:httpclient5
jakarta.persistence
, javax.servlet
, jakarta.validation
com.querydsl:querydsl-jpa::jakarta
, kapt(group = "com.querydsl", name = "querydsl-apt", classifier = "jakarta")
A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction java.lang.reflect.InvocationTargetException (no error message)
에러가 발생하고 trace 추적 시 Caused by: java.lang.NoClassDefFoundError: javax/persistence/Entity
인 경우 확인sentry-spring-boot-starter-jakarta
로 변경type level에서 constructor binding이 필요 없어짐
Failed to instantiate [...]: Illegal arguments for constructor
발생spring rest docs requestParameters -> queryParameters or formParameters
spring cloud 2022.0.x
MySQLDialect
의 하위 버전들이 dperecated(최소버전 8)
++ aws 관련 라이브러리 사용할 경우 slf4j 관련 버전 충돌이 발생할 수 있다. 나는 athena jdbc를 사용할때 gradle에서 별도 저장소의 jar 파일을 직접 가져와 사용하고 있는데 이 부분에서 문제가 생겼다.
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.1-Release-Notes
spring-boot-docker-compose 가 추가됐다. https://docs.spring.io/spring-boot/docs/3.1.0/reference/html/features.html#features.docker-compose
Testcontainers를 스프링부트에서 정식 지원한다. https://docs.spring.io/spring-boot/docs/3.1.0/reference/html/features.html#features.testing.testcontainers
뜬금없이 Unable to start web server 에러 발생 시
ServletWebServerApplicationContext.selfInitialize
단계에서 dispatcherServlet
두 번 등록하는 것이 확인 될 경우ServletRegistrationBean
수동 등록 중인지 확인Application run failed
org.springframework.context.ApplicationContextException: Unable to start web server
//...
Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
//...
Caused by: java.lang.IllegalStateException: Failed to register 'servlet dispatcherServlet' on the servlet context. Possibly already registered?
//...
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:126)
... 13 common frames omitted
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.2-Release-Notes
spring cloud 버전을 2023.0.2으로 올려야 한다.
(https://github.com/spring-cloud/spring-cloud-release/wiki/Supported-Versions#supported-releases)
영속 프레임워크 여러개 사용하는 경우 Bean 등록 중복되는 경우 체크 필요
ConflictingBeanDefinitionException
발생