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

 

  • Focus sur les briques SI de la DTSI :
  • 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

Made with Slides.com