3/27/2024, Gradle 기준
정확히는 1.5.22.RELEASE를 2 최신 버전(2.7.x)으로 전환하는 것이다
Boot 1의 최신 버전(1.5.x)까지 올린다
의존성 목록: https://docs.spring.io/spring-boot/docs/1.5.x/reference/html/appendix-dependency-versions.html
Java 6+와 Spring Framework 4.3.25을 요구한다
여기서는 이미 최신 버전을 사용하고 있어 건너띔
Boot 2의 첫 버전(2.0.0.RELEASE)으로 올린다
의존성 목록: https://docs.spring.io/spring-boot/docs/2.0.x/reference/html/appendix-dependency-versions.html
Java 8+와 Spring Framework 5.0을 요구한다
2.1로 단번에 올리지 말고, 단계적으로 올려야 한다
application.properties/yml 설정을 변경한다
많은 프라퍼티가 개명/삭제되었다
이를 위해 spring-boot-properties-migrator 모듈을 제공한다. 애플리케이션의 환경을 분석하고, 시작할 때 진단을 출력한다. 또한 런타임에 일시적으로 전환까지 해준다. 전환 중에는 의존성을 추가하자. 전환이 완료되면 꼭 제거해주자
runtime "org.springframework.boot:spring-boot-properties-migrator"
Spring Boot Gradle Plugin
더이상 자동으로 의존성 관리 플러그인을 적용하지 않는다. 스프링 부트 의존성 BOM과 맞는 버전을 Importing 해야한다
최신 버전은 1.1.4인데 해당 버전 사용 시 빌드 에러 발생하였다 (그레이들 버전: 4.9)
Failed to notify dependency resolution listener.
> org.gradle.api.artifacts.result.ResolvedDependencyResult.isConstraint()Z
1.1.0 버전을 사용하니 빌드가 되었다
plugins {
id "java"
id "org.springframework.boot" version "2.0.0.RELEASE"
id "io.spring.dependency-management" version "1.1.0"
}
spring-boot-starter-mobile
기존 프로젝트가 spring-boot-starter-mobile 의존성을 사용하는데, 다른 스프링 부트 의존성처럼 스프링 부트 버전을 생략했더니 빌드 실패했다
프로젝트명:test: Could not find org.springframework.boot:spring-boot-starter-mobile:.
Required by:
project :
원인은 해당 모듈의 마지막 버전은 1.5.22.RELEASE이며
https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mobile
더이상 유지보수가 되지 않는 모듈이다
https://github.com/spring-attic/spring-mobile
따라서 버전을 직접 명시했다
compile "org.springframework.boot:spring-boot-starter-mobile:1.5.22.RELEASE"
Executable jar로 패키징
bootRepackage 태스크가 bootJar로 변경되었다
아래 설정은 제거해도 된다
springBoot {
executable = true
}
Fully executable jar로 패키징
bootJar {
launchScript()
}
ErrorController 클래스 패키지 이동됨
org.springframework.boot.autoconfigure.web.ErrorController가 org.springframework.boot.web.servlet.error.ErrorController로 패키지 이동되었다
Spring Data Commons 의존성 관련
QueryByExampleExecutor 클래스의 메서드가 바뀜
findByOne을 사용한 코드는 findById 등으로 변경해야 함
Spring Security 의존성 관련
시큐리티 버전이 4.2.13.RELEASE에서 5.0.3.RELEASE가 되어 제공되는 클래스들이 달라졌다
GlobalAuthenticationConfigurerAdapter 클래스 삭제됨
대신 SecurityConfigurerAdapter를 사용하면 된다. 하위 클래스인 WebSecurityConfigurerAdapter를 상속받는 설정 클래스를 만들어 쓰면 될 듯?
pl.allegro.tech.boot:handlebars-spring-boot-starter 의존성 관련
java.lang.NoSuchMethodError: org.springframework.boot.autoconfigure.template.AbstractTemplateViewResolverProperties.applyToViewResolver(Ljava/lang/Object;)V 에러
해당 프로젝트는 pl.allegro.tech.boot:handlebars-spring-boot-starter 0.2.10을 사용하고 있었는데,
https://github.com/allegro/handlebars-spring-boot-starter 여기를 보면 스프링 부트 2부터는 0.3.0 이상을 사용해야하는 것 같다
https://github.com/allegro/handlebars-spring-boot-starter/tags
Boot 2.0의 최신 버전(2.0.9.RELEASE)으로 올린다
이번 작업 시에는 변경사항 없었음
Boot 2.4의 최신 버전(2.4.13)으로 올린다
그레이들 버전 판올림
Spring Boot Gradle Plugin이 그레이들 판올림을 요구한다
Caused by: org.gradle.api.GradleException: Spring Boot plugin requires Gradle 5 (5.6.x only) or Gradle 6 (6.3 or later). The current version is Gradle 4.9
https://services.gradle.org/distributions/
여기서는 그레이들 6.9.4로 올려보겠다
gradle/wrapper/gradle-wrapper.properties
..
distributionUrl=https\://services.gradle.org/distributions/gradle-6.9.4-bin.zip
..
이제 io.spring.dependency-management 플러그인의 최신버전(1.1.4)을 사용할 수 있게 된다
plugins {
..
id "io.spring.dependency-management" version "1.1.4"
}
의존성 관리를 위한 설정이 바뀌었다
https://docs.gradle.org/current/userguide/upgrading_version_5.html#deprecations
그레이들 7부터는 사용불가라고 하고 IDE에서 Strikethrough 표시가 되니 이참에 변경하자
- compile -> implementation
- runtime -> runtimeOnly
- testCompile -> testImplementation
- ..
PageRequest 객체 생성자 변경
생성자 호출 대신 PageRequest.of 정적 메서드 사용
JUnit 4 -> JUnit 5
이제 스프링 부트 테스트에서 @RunWith 애너테이션이 불필요하다
build.gradle
test {
useJUnitPlatform()
}
설정 데이터 변경
2.4부터 설정 데이터에 변경사항이 있다
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-Config-Data-Migration-Guide
spring.profiles.include
2.4 아래 버전에서 아래와 같이 프로파일 전용 설정파일을 쓰고 있으면
application-local.yml
spring:
profiles:
include: console-logging
(로컬 PC에서 개발할 때 local 프로파일만 사용해도 console-logging 프로파일을 추가로 사용하게 되어 로그백 설정 중 콘솔 출력을 활성화시키는 설정을 해두었음)
아래와 같은 에러 메시지가 발생한다
Property 'spring.profiles.include' imported from location 'class path resource [config/application-local.yml]' is invalid in a profile specific resource [origin: class path resource [config/application-local.yml] - 9:14]
아래와 같이 변경해야 한다
application.yml
spring:
profiles:
group:
local:
- console-logging
logging.path
application-local.yml
logging:
path: /path/logs/${spring.application.name}
로컬 개발이 아닌 서버 운영 환경에서는 파일 로깅을 할 것이다. 위와 같은 설정을 할 텐데 아래 경고 로그가 출력된다
Property source 'Config resource 'class path resource [config/application.yml]' via location 'optional:classpath:/config/'':
Key: logging.path
Line: 5
Replacement: logging.file.path
아래와 같이 변경해야 한다
application.yml
logging:
file:
path: /path/logs/${spring.application.name}
logback:
rollingpolicy:
max-file-size: 10MB
max-history: 7
파일 롤링 정책 설정도 추가되었는데, logback-spring.xml에서 아래와 같이 환경변수를 사용할 수 있다
..
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
..
<maxFileSize>${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE}</maxFileSize>
<maxHistory>${LOGBACK_ROLLINGPOLICY_MAX_HISTORY}</maxHistory>
</rollingPolicy>
..
spring.mvc.favicon.enabled
부트 2.2부터 Deprecated되었다. 더 이상 지원하지 않으니 그냥 제거하자
Boot 2.7의 최신 버전(2.7.18)으로 올린다
ErrorController 인터페이스 > getErrorPath 메서드
2.5에서 해당 메서드는 제거된다
server.error.path 프라퍼티 설정으로 대체된다. 경로를 /error로 사용한다면 기본값이므로 설정하지 않아도 된다
참고
'Spring > Spring Boot' 카테고리의 다른 글
| Spring Boot > Fully executable jar 실행 시 MyBatis 에러 (0) | 2024.04.18 |
|---|---|
| Spring Boot > 빌드 설정 > Maven (0) | 2024.03.08 |
| Spring Boot > 애플리케이션 실행 방법 (0) | 2024.03.08 |
| Spring Boot > 문제 해결 > 내장 톰캣 사용 시 IntelliJ IDEA에서 src/main/webapp/WEB-INF 아래의 JSP 파일을 정상적으로 읽지 못하는 이슈 (0) | 2024.02.22 |