Migration Spring Boot 2.x
Proposition de procédure de migration
de Spring Boot 1.x vers Spring Boot 2.x




Contexte
- Spring Boot 1.x EOL Aug 1st 2019
- Impact sur les développements et / ou sur la maintenance
- Impact côté OPS


OBJECTIFS
- Limiter le nombre d'opérations
- Ne pas doubler l'infra


CADRE GENERAL
- Puppet pour le provisionnement des environnements
- Spring Boot Admin
- Spring Cloud Config
- Spring Cloud Netflix Eureka
- Flyway
- ...
- le plus gros changement : les modifications d'espaces de nom de certaines propriétés de configuration


LES IMPACTS
OPS
Module Puppet / Trinity pour le provisionnement des environnements :
- configuration des applications, et
- démarrage des applications


LES IMPACTS
OPS - configurations
Exemple :
spring:
mail:
host:
port
#MANAGEMENT
management:
port:
address:
context-path:
#SECUTIRY
security:
enabled:
#SERVER
server:
port:
session-timeout:
tomcat:
uri-encoding:
basedir:
contextPath:
#LOGS
logging:
file:
security.oauth2.client:
client-id:
client-secret:
gitlab.auth-token:
spring:
mail:
host:
port
#MANAGEMENT
management:
server:
port:
address:
servlet:
context-path:
#SERVER
server:
port:
servlet:
session-timeout:
tomcat:
uri-encoding:
basedir:
servlet:
contextPath:
#LOGS
logging:
file:
security.oauth2.client:
client-id:
client-secret:
gitlab.auth-token:
Spring Boot 1.x
Spring Boot 2.x


LES IMPACTS
OPS - Démarage des Applis
--spring.profiles.active=$CYCLE$BACK_PROFILE --spring.config.location=file:$ROOT_FOLDER/conf/$APP-back.yml
Spring Boot 1.x
Spring Boot 2.x
--spring-boot.run.profiles=$CYCLE$BACK_PROFILE --spring.config.additional-location=file:$ROOT_FOLDER/conf/$APP-back.yml

implique une forte dépendance DEV / OPS !


LES IMPACTS
DEV - FLYWAY
Cf. https://flywaydb.org/documentation/releaseNotes#5.0.0
Avant de migrer sur une version Spring Boot 2.x qui va "tirer" une version 5.x de Flyway, il faut :
- Migrer vers la dernière version Spring Boot 1.5.22, et
- Surcharger la version Flyway en 4.2.0
Cette partie n'a pas d'impact et est une phase préparatoire et obligatoire à mener jusqu'en production dans les meilleurs délais.


LES IMPACTS
DEV - CONFIGURATIONS
Les modifications sur les propriétés de configurations impliquent de facto la pasage à Spring Boot 2.x et donc la mise à jour du module Puppet pour Trinity

référence ici


LES IMPACTS
DEV - CONFIGURATIONS (1 / 3)
Montées de versions (pom.xml):
- spring-boot-starter-parent : 2.2.0-RELEASE (au 22/10/2019)
- spring-cloud-dependencies : Greenwich.SR3
- spring-boot-admin : 2.1.6
+
ajout de la dépendance :
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>


LES IMPACTS
DEV - CONFIGURATIONS (2 / 3)
Cette dépendance vous donnera des indications sur les changements d'espaces de nom.
Exemple :
2019-10-22 13:03:23,135 [main] [o.s.b.c.p.m.PropertiesMigrationListener] WARN -
The use of configuration keys that have been renamed was found in the environment:
Property source 'applicationConfig: [file:/opt/{appName}/conf/{appName}-back.yml]':
Key: management.address
Line: 10
Replacement: management.server.address
Key: management.context-path
Line: 11
Replacement: management.server.servlet.context-path
Key: management.port
Line: 9
Replacement: management.server.port
Key: server.context-path
Line: 21
Replacement: server.servlet.context-path
Each configuration key has been temporarily mapped to its replacement for your convenience. To silence this warning, please update your configuration to use the new keys.


LES IMPACTS
DEV - CONFIGURATIONS (3 / 3)
Actuator :
Il faut désormais explicitement autoriser les endpoints (réf).
Exemple :
Il faut renseigner la propriété base-path, ici avec la valeur /.
Si ce n'est pas fait le endpoint sera par défaut :
/supervision/actuator/{endpoint}
et aura un impact sur la supervision !
management:
endpoints:
web:
base-path: /
exposure:
include: env,health,info,mappings


Planning



Planning
La première phase est relative à Flyway et n'introduit pas de difficulté particulière.
(Cf. https://github.com/spring-projects/spring-boot/wiki/spring-boot-1.5-release-notes pour les projets qui sont encore sur une version Spring Boot 1.4)
Elle devrait être time-boxée car obligatoire avant la migration Spring Boot 2.x
A vérifier s'il est nécessaire de séparer cette migration technique du fonctionnel en cours de développement (recommandé).
Les applications du socle (argos, eureka et themis) à migrer en premier pour vérifier les impacts sur les autres applications clientes.


Planning
La deuxième phase doit être coordonnée entre les Dév et les Ops.
Elle peut déjà embarquer les modifications à faire sur les configurations. En fonction de la stratégie choisie, la dernière phase peut donc devenir facultative.


Questions

RedStone / DTSI (GNC) - Migration SpringBoot 2.x
By Didier Vanderstoken
RedStone / DTSI (GNC) - Migration SpringBoot 2.x
Proposition de procédure de migration de SpringBoot 1.x vers SpringBoot 2.x
- 438