springboot - spring boot web
¿Cómo actualizar selectivamente una dependencia en Spring Boot?(caso de muestra: Spring Data) (1)
Hay varias maneras de despellejar al gato que vienen con diferentes altibajos:
Opción 1: actualización a una versión más nueva de Boot
La manera más segura en general es actualizar a una versión más reciente de Spring Boot. Generalmente aconsejamos estar en la última versión menor en la generación principal actual. En su caso, 1.5 es el menor más reciente, por lo que recomendamos actualizarlo (actualmente 1.5.6). Esto generalmente se logra simplemente cambiando el número de versión del pom padre que usa.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
</parent>
Pros
- Automáticamente actualizará todas las dependencias administradas de arranque a sus últimas versiones compatibles . Esto es aconsejable ya que esto asegurará que obtenga las últimas correcciones para actualizaciones de seguridad en dependencias de terceros.
Contras
- Una actualización menor de la versión puede requerir que cambie ligeramente las cosas sobre su configuración o en las API en caso de que dependa de una API de terceros a partir del código de su aplicación. Las actualizaciones de versiones menores en Boot generalmente son muy cuidadosas cuando se trata de no implementar cambios de última hora en libs de terceros, pero desafortunadamente no todas siguen una versión semántica. Sin embargo, si tiene un conjunto de pruebas decente, debería ser fácil averiguar si tiene problemas. Se recomienda echar un vistazo a las notas de la versión ya que generalmente contienen guías de migración.
Opción 2: actualización de dependencias individualmente
Una alternativa al enfoque anterior es mantenerse en la versión de arranque en la que se encuentra, pero actualizando selectivamente las dependencias de terceros. La forma preferida de hacerlo es verificando los marcadores de posición de la versión en las dependencias de primavera-arranque . Entonces solo necesita redeclarar la propiedad en su proyecto y modificar la versión. Para Spring Data, eso sería:
<properties>
<spring-data-releasetrain.version>Ingalls-SR6<spring-data-releasetrain.verion>
</properties>
En el caso de Spring Data, está actualizando todo el tren de lanzamiento de una vez aquí para que no se encuentre con la incompatibilidad entre los módulos de Spring Data internamente si solo actualiza un módulo. Esa es una de las razones principales por las que se recomienda esta "actualización por propiedad" antes que volver a declarar explícitamente una dependencia en una versión más nueva (que en algunos casos puede ser un último recurso).
Pros
- La actualización es una operación mucho más selectiva. A diferencia del enfoque anterior, no corre el riesgo de encontrarse con problemas de actualización de dependencias no relacionadas.
Contras
- ¡Puede que no funcione! - A veces las dependencias cambian algunas API internas de las que depende la configuración automática de Boot en una versión menor. Esto podría hacer que la configuración automática no funcione en el inicio y que luego intente reemplazarla excluyendo explícitamente la configuración automática y escribiendo la configuración manual.
Pasos sugeridos
En la práctica, generalmente pruebo los siguientes pasos:
- Use la opción 1 para actualizar con el menor impacto posible. Si eso tiene éxito: Listo.
- Si eso causa problemas, evalúe qué tan difícil es reemplazar la configuración automática con la configuración manual (generalmente requiere un poco de conocimiento y experiencia con Boot. Si eso tiene éxito: Listo.
- Use la opción 2 para actualizar a una versión más nueva de Boot y evalúe el impacto que esto tiene en su código de aplicación.
2 y 3 pueden ser intercambiables según lo que prefiera personalmente o la política de actualización de dependencia que haya definido para su equipo.
En términos generales, es una buena idea vigilar los lanzamientos de Boot e intentar regularmente actualizar el proyecto a la versión más nueva, pero no necesariamente enviar esa actualización a la producción. Eso le permite evaluar el riesgo de actualización y estimar la cantidad de trabajo que debe incluirse en esto. Evitar las actualizaciones básicamente las hace más dolorosas , pero sí, a veces no se pueden hacer de inmediato por razones políticas o porque la actualización está teniendo problemas en las versiones más nuevas.
Utilizo el arrancador Spring Data JPA de Spring Boot (1.4.1). Contiene Spring Data JPA 1.10.3. Sin embargo, necesito usar la anotación @DomainEvents
que aún no existe en esta versión de datos de primavera. Cuando trato de agregar la última versión de Spring Data JPA, recibo errores cuando se ejecuta mi aplicación.
Mi ejemplo pom:
<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>
Cuando trato de agregar la última versión de Spring Data JPA de esa manera:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.11.6.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
Obtengo errores cuando inicio mi aplicación. Errores como este:
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
¿Cómo puedo usar la versión más reciente de Spring Data JPA? Necesito @DomainEvents
en mi aplicación. ¡Gracias!