programing

Spring Boot에서 종속성을 선택적으로 업그레이드하는 방법? (샘플 케이스: Spring Data)

muds 2023. 6. 20. 21:55
반응형

Spring Boot에서 종속성을 선택적으로 업그레이드하는 방법? (샘플 케이스: Spring Data)

Spring Boot (1.4.1)Spring Data JPA Starter of Spring Boot (1.4.1) Data 1.파일은 Spring Data JPA 1.10입니다.3이 포함되어 있습니다.하지만, 나는 사용해야 합니다.@DomainEvents이 버전의 스프링 데이터에 아직 존재하지 않는 주석입니다.Spring Data JPA의 최신 버전을 추가하려고 하면 응용 프로그램이 실행될 때 오류가 발생합니다.

내 폼 예:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.1.RELEASE</version>
        <relativePath/>
</parent>

<dependencies>
        ...
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        ...
</dependencies>

Spring Data JPA의 최신 버전을 추가하려고 할 때:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.11.6.RELEASE</version>
        </dependency>
    </dependencies>
</dependencyManagement>

앱을 시작할 때 오류가 발생합니다.다음과 같은 오류:

Caused by: java.lang.NoSuchMethodException: org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.<init>()
  at java.lang.Class.getConstructor0(Class.java:3082) ~[na:1.8.0_121]
  at java.lang.Class.getDeclaredConstructor(Class.java:2178) ~[na:1.8.0_121]
  at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:80) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
  ... 53 common frames omitted

Spring Data JPA의 최신 버전을 사용하려면 어떻게 해야 합니까?필요합니다@DomainEvents감사합니다!

여기서 고양이의 가죽을 벗기는 데는 여러 가지 방법이 있는데, 이 방법들은 모두 다른 장단점을 가지고 있습니다.

옵션 1: 최신 버전의 부팅으로 업그레이드

전반적으로 가장 안전한 방법은 보다 최신 버전의 스프링 부트로 업그레이드하는 것입니다.우리는 일반적으로 현재의 주요 세대에서 최신 마이너 버전을 사용할 것을 권장합니다.귀하의 경우 1.5가 가장 최근의 부차적인 것이므로 해당 부차적인 것(현재 1.5.6)으로 업그레이드하는 것이 좋습니다.일반적으로 사용하는 부모 폼의 버전 번호만 변경하면 됩니다.

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>1.5.6.RELEASE</version>
</parent>

장점

  • 모든 부팅 관리 종속성을 호환되는 최신 버전으로 자동 업그레이드합니다.타사 종속성의 보안 업데이트에 대한 최신 수정 사항을 확인할 수 있으므로 이 방법을 사용하는 것이 좋습니다.

단점

  • 애플리케이션 코드에서 타사 API를 사용하는 경우 마이너 버전 업그레이드를 수행하려면 구성이나 API에 대한 내용을 약간 변경해야 할 수 있습니다.부팅의 사소한 버전 업그레이드는 서드 파티 립의 변경 사항을 방해하지 않을 때 대개 매우 조심스럽지만, 안타깝게도 모든 버전이 의미론적 버전화를 따르는 것은 아닙니다.그러나 적절한 테스트 제품군이 있다면 문제가 발생했는지 여부를 쉽게 확인할 수 있습니다.일반적으로 마이그레이션 안내서가 포함되어 있으므로 릴리스 노트를 살펴보는 것이 좋습니다.

옵션 2: 종속성을 개별적으로 업그레이드

이전 접근 방식의 대안은 현재 사용 중인 부팅 버전을 유지하면서 타사 종속성을 선택적으로 업그레이드하는 것입니다.이를 위해 선호되는 방법은 스프링 부트 종속성에 어떤 버전의 자리 표시자가 있는지 확인하는 것입니다.그런 다음 프로젝트에서 속성을 다시 선언하고 버전을 수정하면 됩니다.스프링 데이터의 경우 다음과 같습니다.

<properties>
  <spring-data-releasetrain.version>Ingalls-SR6<spring-data-releasetrain.verion>
</properties>

Spring Data의 경우 모듈 하나만 업그레이드하면 내부적으로 Spring Data 모듈 간의 비호환성이 발생하지 않도록 전체 릴리즈 트레인을 한 번에 업그레이드합니다.이것이 최신 버전에서 종속성을 명시적으로 다시 선언하는 것보다 이 "속성별 업그레이드"가 권장되는 주요 이유 중 하나입니다(경우에 따라 여전히 마지막 수단이 될 수 있음).

장점

  • 업그레이드는 훨씬 더 선택적인 작업입니다.이전 접근 방식과 달리 종속성과 무관한 업그레이드 문제에 직면할 위험이 없습니다.

단점

  • 작동하지 않을 수 있습니다! - 때때로 종속성은 부 버전에서 부팅의 자동 구성이 의존하는 일부 내부 API를 변경합니다.이로 인해 시작 시 자동 구성이 작동하지 않을 수 있으며 자동 구성을 명시적으로 제외하고 수동 구성을 작성하여 교체할 수 있습니다.

제안된 단계

실제로 다음 단계를 수행합니다.

  1. 가능한 한 영향을 최소화하면서 업그레이드하려면 옵션 1을 사용합니다.성공할 경우:다 했어요.
  2. 문제가 발생하는 경우 자동 구성을 수동 구성으로 교체하는 것이 얼마나 어려운지 평가합니다(일반적으로 부팅에 대한 약간의 통찰력과 경험이 필요함).성공할 경우:다 했어요.
  3. 옵션 2를 사용하여 최신 버전의 부팅으로 업그레이드하고 부팅이 응용 프로그램 코드에 미치는 영향을 평가합니다.

2와 3은 개인적으로 선호하는 항목이나 팀에 대해 정의한 종속성 업그레이드 정책에 따라 서로 호환될 수 있습니다.

일반적으로 부트 릴리스를 주시하고 정기적으로 프로젝트를 최신 버전으로 건식 업그레이드하는 것이 좋습니다. 하지만 반드시 운영 환경으로 업그레이드할 필요는 없습니다.따라서 업그레이드 위험을 평가하고 이 작업에 필요한 작업량을 추정할 수 있습니다.업그레이드를 피하는 것은 기본적으로 그들을 더 고통스럽게 만들 뿐입니다. 하지만 때때로 정치적인 이유나 새로운 버전에서 업그레이드에 문제가 발생하기 때문에 바로 만들 수 없습니다.

언급URL : https://stackoverflow.com/questions/45967464/how-to-selectively-upgrade-a-dependency-in-spring-boot-sample-case-spring-dat

반응형