Home Spring boot 3.x적용
Post
Cancel

Spring boot 3.x적용

11 → 17 변경

Java 버전은 17인데 프로젝트의 JDK는 11로 되어있었고 spring boot 버전은 2.x였다.

그래서 spring boot는 3.x로 프로젝트 JDK는 17로 통일 시키기로 했다.



build.gradle

1
2
3
4
plugins {
    id 'org.springframework.boot' version '3.0.1'
}
sourceCompatibility = '17'

sourceCompatibility를 17 이상으로 변경한다.




Preferences/Settings

Preferences/Settings → Build, Execution, Deployment → Build Tools → Gradle

Gradle의 JVM이 Java 17이상인지 확인한다.

image



Preferences/Settings → Build, Execution, Deployment → Compiler → Java Compiler

image




Project SDK

File → Project Structure로 이동. 프로젝트 SDK의 버전을 확인후 Java 17이상으로 설정한다.

Project

image


Modules

image






참고(적용하면서 생겨난 오류들 해결하기)

버전을 업그레이드 하면서 기존 프로젝트에 나타난 문제들을 정리했다.


import javax.* 오류

javax.* 패키지 부분에서 빨간 줄이 떴다.

찾아보니 이클립스 재단은 Jakarta EE 라고 하고 패키지는 jakarta.* 로 명명했다고 한다.

다음과 같은 JavaEE 이름들이 JakartaEE 이름으로 새롭게 변경되었고, 패키지 이름로 변경되었다.

  • Java Servlet(javax.servlet) → Jakarta Servlet(jakarta.servlet)
  • Java Message Servie (javax.jms) → Jakarta Messaging (jakart.jms)
  • JPA:Java Persistence API (javax.persistence) → Jakarta Persistence(jakarta.persistence)
  • JTA:Java Transaction API (javax.transaction) → Jakarta Transaction(jakarta.transaction)
  • Java Mail (javax.mail) → Jakarta Mail (jakarta.mail)




@PostConstruct

Java 9 이상부터는 찾을 수 없다고 뜬다.

@PostConstruct를 사용할 수 없기 때문에 build.gradle에 종속성을 추가해주면 된다.

implementation 'javax.annotation:javax.annotation-api:1.3.2'


다른 방법으로는 Spring bean interface 사용이 있다.

Spring framework 의 경우 InitializingBean, DisposableBean 을 구현하여 @PostConstruct @PreDestroy 대체가 가능하다고 한다.

이 부분은 아래 reference에 첨부된 링크를 참고해서 보면 될듯하다.




antMatchers()

antMatchers()를 사용할 수 없었고 antMatchers 대신 requestMatchers()를 사용했다.




application.properties

1
2
# do not share id
spring.jpa.hibernate.use-new-id-generator-mappings= false

위와 같이 사용했었는데 Spring Boot 3.x 부터 제거 되었다고 한다.

spring.jpa.hibernate.use-new-id-generator-mappings= false 이 부분은 설정파일에서 제거하면 된다.



image

spring.redis.host는 제거되었다고 해서 아래와 같이 변경했다.

1
2
3
4
5
spring.redis.host = local
spring.redis.port = 6379
↓ 
spring.data.redis.host = local
spring.data.redis.port = 6379




SLF4J

APPLICATION을 실행하려 보니

SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.
SLF4J: Defaulting to no-operation (NOP) logger implementation

라는 에러가 떴다.


build.gradle에서

1
implementation 'org.slf4j:slf4j-api:1.7.36'

를 작성했었는데 해당 부분을 제거하고 아래로 작성했다.

1
implementation 'org.slf4j:slf4j-simple:1.7.36'


이 부분에 대해 검색하다보면 2개를 작성하라는 글이 많은데 이럴 경우 오류가 뜬다.

slf4j-log4j12 또는 slf4j-simple 중 하나가 있어야 하며 둘 다 작성하면 안된다.

나는 후자로 작성했다.





REFERENCE

[java 17 적용]

[참고]

This post is licensed under CC BY 4.0 by the author.