본문 바로가기
FrameWork/Spring

[Spring] spring boot 3.x & Java 21로 버전업!

by 계범 2024. 9. 19.

db & 코어 모듈들 버전업 해준 뒤, 프로젝트 버전 업 진행.

 

gradle-wrapper.properties 설정 변경

 

그래들 버전 업

distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.1-bin.zip

 

 

build.gradle 설정 변경

 

java 버전 지정 방법 변경

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(21)
    }
}

 

querydsl 지정방식 변경

 // queryDSL
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api:2.1.1"
annotationProcessor "jakarta.persistence:jakarta.persistence-api:3.1.0"
    
def querydslSrcDir = 'build/generated/querydsl'

tasks.withType(JavaCompile).configureEach {
    options.getGeneratedSourceOutputDirectory().set(file(querydslSrcDir))
}

sourceSets {

    main.java.srcDir querydslSrcDir

}

 

Lombok 버전 업

  // Lombok
compileOnly 'org.projectlombok:lombok:1.18.30'
annotationProcessor 'org.projectlombok:lombok:1.18.30'

 

hibernate 관련 버전 업

// hibernate
implementation 'org.hibernate.orm:hibernate-core:6.3.0.Final'
implementation 'com.vladmihalcea:hibernate-types-60:2.21.0'

 

스웨거 버전업

implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.6.0'

 

yml 변경

레디스 프로퍼티 주입 값 형식 변경.

org.springframework.boot:spring-boot-autoconfigure:3.3.3 에서
spring.redis 형태 deprecated 뜸.

spring.data.redis형태로 권장.

 

// 기존코드
redis:
    host: "master.kr-dv-elc-acc-v1.lgfm60.apn2.cache.amazonaws.com"
    port: "4306"
    password: "xxxx"
    database: "2"
    
// 변경 코드
data:
	redis:
        host: "master.kr-dv-elc-acc-v1.lgfm60.apn2.cache.amazonaws.com"
        port: "4306"
        password: "xxxx"
        database: "2"

 

프로젝트 코드 변경

javax -> jakarta 코드 변경

 

intellij 옵션으로 한번에 변경완료.

 

 

hibernate 버전 업 관련으로 코드 변경

 

기존 @TypeDef 지정 삭제 후 컬럼 위에 @Type(xx.class) 타입 넣어주면됨.

// 예시
@Type(JsonStringType.class)
@Column(columnDefinition = "json")
private List<String> btnOrder;

 

 

security 코드 변경

 

WebSecurityConfigurerAdapter는 Spring Security 5.7에서 Deprecated 되었고, Spring Security 6.x 버전에서는 제거되었습니다. Spring Boot 3.x에서 Spring Security 6.x가 기본으로 사용되며, 이로 인해 더 이상 WebSecurityConfigurerAdapter를 사용할 수 없습니다.

Spring Security 6.x에서는 새로운 Security Configuration 방식을 사용해야 합니다. 더 이상 WebSecurityConfigurerAdapter를 확장하지 않고, **SecurityFilterChain**을 사용하여 보안 구성을 명시합니다.

 

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

	antMatcher
}

 

배치 코드 변경

 

스프링부트 3으로 가면서 spring batch 5 이상에서 BatchConfigurer & DefaultBatchConfigurer 가 depreacated됨.

 

// 기존 코드

@Configuration
@EnableBatchProcessing
@EnableAutoConfiguration(exclude = {HibernateJpaAutoConfiguration.class})
public class BatchConfiguration implements DefaultBatchConfigurer {
}

// 변경 코드

@Configuration
@EnableBatchProcessing
@EnableAutoConfiguration(exclude = {HibernateJpaAutoConfiguration.class})
public class BatchConfiguration extends DefaultBatchConfiguration {
}

 

spring batch 5 이상에서 jobParameter의 타입체크가 엄격해짐.

 

// 기존 코드
Map<String, JobParameter> jobParametersMap = new HashMap<>();
jobParametersMap.put("message", new JobParameter(message));
JobParameters parameters = new JobParameters(jobParametersMap);

try {
    jobLauncher.run(jobConfig.cmsFileBoxJob(), parameters);
} catch (Exception e) {
    log.error(e.getMessage(), e);
} finally {
    ack.acknowledge();
}

// 변경 코드
Map<String, JobParameter<?>> jobParametersMap = new HashMap<>();
jobParametersMap.put("message", new JobParameter<>(message, String.class));
JobParameters parameters = new JobParameters(jobParametersMap);

try {
    jobLauncher.run(jobConfig.cmsFileBoxJob(), parameters);
} catch (Exception e) {
    log.error(e.getMessage(), e);
} finally {
    ack.acknowledge();
}

 

spring batch 5 이상에서 JobBuilderFactory와 StepBuilderFactory가 deprecated됨.

관련 설정도 변경해줘야함..

 

리퀴베이스 변경

버전업만 해주니 해결

댓글