[JAVA] Modifications lors de la migration de Spring Boot 2.0 vers Spring Boot 2.2

introduction

J'écrirai les points de correction lors de la migration de l'application de Spring Boot 2.0.2 (environ 7KL, partie serveur de SPA) vers Spring Boot 2.2.5.

Corrections de Spring Boot

Maven

J'utilisais JUnit5, mais dans Spring Boot 2.0, junit-platform-launcher et mockito-junit-jupiter, qui n'étaient pas sous le contrôle de spring-boot-starter-parent, sont maintenant sous le contrôle de Spring Boot 2.2. Il n'est plus nécessaire de spécifier la version.

SpringBoot2.0


<dependency>
  <groupId>org.junit.platform</groupId>
  <artifactId>junit-platform-launcher</artifactId>
  <version>1.3.1</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.mockito</groupId>
  <artifactId>mockito-junit-jupiter</artifactId>
  <version>2.22.0</version>
  <scope>test</scope>
</dependency>

SpringBoot2.2


<dependency>
  <groupId>org.junit.platform</groupId>
  <artifactId>junit-platform-launcher</artifactId>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.mockito</groupId>
  <artifactId>mockito-junit-jupiter</artifactId>
  <scope>test</scope>
</dependency>

Paramètres d'écrasement des haricots

Dans Spring Boot 2.0, lorsque le même bean est défini, le bean avec @ Primary est prioritaire, mais dans Spring Boot 2.2, une exception BeanDefinitionOverrideException est lancée lors de l'initialisation.

Caused by: org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'taskExecutor' defined in mypackage.TestConfiguration: Cannot register bean definition [Root bean: class [null]; scope=; abstract=false; lazyInit=null; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=true; factoryBeanName=testConfiguration; factoryMethodName=taskExecutor; initMethodName=null; destroyMethodName=(inferred); defined in mypackage.TestConfiguration] for bean 'taskExecutor': There is already [Root bean: class [null]; scope=; abstract=false; lazyInit=null; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=mainConfig; factoryMethodName=taskExecutor; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [mypackage/MainConfig.class]] bound.

Pour éviter cela, définissez la propriété spring.main.allow-bean-definition-overriding dans application.yml.

SpringBoot2.0


spring:
  main:
    allow-bean-definition-overriding: true

Modification du type de valeur de paramètre RestTemplateBuilder

Lors de la configuration de RestTemplate à l'aide de RestTemplateBuilder, le paramètre de délai d'expiration est passé de la spécification en millisecondes à la spécification java.time.Duration, ce qui facilite la compréhension de l'unité.

SpringBoot1.5


new RestTemplateBuilder()
    .setConnectTimeout(5000)
    .setReadTimeout(60000);

SpringBoot2.0


new RestTemplateBuilder()
    .setConnectTimeout(Duration.ofMillis(5000))
    .setReadTimeout(Duration.ofMillis(60000));

Changer la méthode de génération de l'objet Sort

La méthode de création de l'objet «org.springframework.data.domain.Sort» dans Spring Data est passée de «nouveau» à «par».

SpringBoot1.5


new Sort(Sort.Direction.fromString(sortDirection), sortColumn);

SpringBoot2.0


Sort.by(Sort.Direction.fromString(sortDirection), sortColumn);

Il semble qu'il a été déplacé vers le package de servlet supplémentaire sous le package de sécurité.

Autre

Cela a été à l'origine mal implémenté, mais dans la méthode de l'interface de référentiel de JPA

List<Auth> findByRoleContains(Collection<Role> roles);

Je ne l'ai pas utilisé. Si vous passez à Spring Boot 2.2 et démarrez l'application,

Caused by: java.lang.IllegalStateException: Operator CONTAINING on role requires a scalar argument, found interface java.util.Collection in method public abstract java.util.List mypackage.repository.AuthRepository.findByRoleContains(java.util.Collection).

Une exception s'est produite.

Contains est une recherche qui inclut des chaînes, et je devrais utiliser In au lieu de Contains. Pourquoi n'y a-t-il eu aucun problème jusqu'à présent? .. (Je ne l'ai pas remarqué parce que je ne l'ai pas utilisé)

List<Auth> findByRoleIn(Collection<Role> roles);

Résumé

C'était beaucoup plus facile que lorsque j'ai mis à jour Spring Boot 1.5 vers 2.0, mais c'est toujours un peu une solution destructrice, alors soyez prudent. Est requis.

Recommended Posts

Modifications lors de la migration de Spring Boot 1.5 vers Spring Boot 2.0
Modifications lors de la migration de Spring Boot 2.0 vers Spring Boot 2.2
L'histoire de la transition de Spring Boot 1.5 à 2.1
Essayez Spring Boot de 0 à 100.
Mise à niveau de la botte à ressort de la série 1.5 à la série 2.0
Précautions lors de la migration de VB6.0 vers JAVA
Changements de Java 8 à Java 11
Introduction à Spring Boot ① ~ DI ~
Introduction à Spring Boot ② ~ AOP ~
Changements majeurs dans Spring Boot 1.5
Introduction à Spring Boot, partie 1
Modifier le message de validation Spring Boot
L'histoire de la montée de Spring Boot de la série 1.5 à la série 2.1 part2
Ce que j'ai corrigé lors de la mise à jour vers Spring Boot 1.5.12 ・ Ce à quoi j'étais accro
Comment écrire et noter lors de la migration de VB vers JAVA
ClassCastException se produit lors de la migration de Java7 vers Java8 ~ Génériques et surcharge ~
[Opensaml] NoClassDefFoundError se produit lors du passage de Tomcat à weblogic
Remarques sur le code de caractère lors de la migration de Windows vers Mac
Mémorandum lorsque Spring Boot 1.5.10 → Spring Boot 2.0.0
Comment configurer Spring Boot + PostgreSQL
Remarques sur la migration de CircleCI 1.0 vers 2.0
Comment utiliser ModelMapper (Spring boot)
Spring Boot à partir de zéro Partie 2
Spring Boot à partir de zéro Partie 1
02. J'ai créé une API pour me connecter de Spring Boot à MySQL (My Batis)
Changer la demande / réponse de l'API REST Spring Boot de CamelCase à SankeCase
Ce que j'ai fait lors de la migration de la série Spring Boot 1.4 vers la série 2.0
Actionneur Spring Boot 2.0, 3 changements à connaître pour le faire fonctionner
Ce que j'ai fait lors de la migration de la série Spring Boot 1.5 vers la série 2.0
Ce à quoi j'ai pensé lorsque j'ai commencé à migrer de Java vers Kotlin
[Introduction à Spring Boot] Vérification de la validation du formulaire
Modifications majeures liées au test Spring Framework 5.0
Transition de Struts2 à Spring MVC (contrôleur)
Erreur Javaw.exe lors du démarrage de Spring Boot (STS)
Comment diviser un fichier de message Spring Boot
Ajoutez une botte de printemps et un dégradé à éclipse
Dépannage lors de la montée de Mastodon de la v3.0.x à la v3.1.x
Comment appliquer immédiatement les modifications de Thymeleaf au navigateur avec #Spring Boot + maven
Modifications majeures liées à Spring Framework 5.0 Web MVC
[Inverser] Spring Security (mis à jour de temps en temps)
Utilisez le mode de modèle de texte Thymeleaf de Spring Boot
Comment utiliser MyBatis2 (iBatis) avec Spring Boot 1.4 (Spring 4)
Comment utiliser h2db intégré avec Spring Boot
03. J'ai envoyé une demande de Spring Boot à l'API de recherche de code postal
Comment réduire l'image de Spring Boot Docker
Comment utiliser les attributs de session Spring Boot (@SessionAttributes)
L'histoire de la montée de la série Spring Boot 1.5 à la série 2.1
[Spring Boot] Comment obtenir des propriétés dynamiquement à partir d'une chaîne contenue dans une URL
Essayez d'implémenter la fonction de connexion avec Spring Boot
Lorsque @Transactional of Spring Boot ne fonctionne pas
Modifications majeures liées au conteneur Spring Framework 5.0 DI
Comment ajouter un chemin de classe dans Spring Boot
Migration de la fonction serveur Eclipse (Tomcat) vers Embed Tomcat
Introduction à Spring Boot + In-Memory Data Grid
Lorsque vous souhaitez notifier une erreur quelque part lors de l'utilisation de graphql-spring-boot avec Spring Boot
Remarques sur les annotations lors de l'écriture de tests pour Spring Boot
Forme de botte de printemps
Comment se lier avec un fichier de propriétés dans Spring Boot
Essayez d'automatiser la migration avec Spring Boot Flyway
[Java] Article pour ajouter une validation avec Spring Boot 2.3.1.