[JAVA] Mémorandum lorsque Spring Boot 1.5.10 → Spring Boot 2.0.0

introduction

L'application WEB sur laquelle je travaille était Spring Boot 1.5.10, mais depuis la sortie de 2.0.0, mettons-la à jour. C'est un mémorandum de ce que j'ai fait à l'époque. Note) Seul ce qui est requis pour l'application WEB en construction est décrit.

(4/18 postscript) Puisqu'une vulnérabilité a été trouvée dans la version 5.0.4 du Spring Framework utilisé dans 2.0.0, elle a été mise à niveau vers 2.0.1, qui est la version 5.0.5 prise en charge. Pour plus de détails (https://www.jpcert.or.jp/at/2018/at180014.html)

Changements brutaux

Spring4 → Spring5

L'article suivant a été très utile pour les modifications apportées à Spring5. Référence) Résumé des changements majeurs dans Spring Framework 5.0

** Java 8 ou supérieur requis **

Java était à l'origine 8 donc il n'a eu aucun effet.

Thymeleaf2 → Thymeleaf3

C'était peut-être la partie la plus influente de l'application que je créais.

À propos de ce que j'ai fait spécifiquement

Pour le moment, j'ai défini la version Spring Boot de gradle sur 2.0.0 et l'ai construite sur Wild: smirk: sans rien modifier. J'ai eu une erreur à la hâte, alors je vais examiner la procédure correctement et la résoudre dans l'ordre.

Les bons garçons devraient lire attentivement le [Guide de migration] de Spring Boot 2.0 (https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide) et lire la pièce. Égayez et essayez.

1. Mise à niveau de gradlew

4.x ou supérieur est requis. Pour une raison quelconque, c'était gradlew 2.x, donc naturellement ce sera de la mousse là-bas. (Le criminel c'est moi)

Mettez à jour la version de la tâche wrapper.

build.gradle

task wrapper(type: Wrapper) {
    gradleVersion = '4.6' //Version 4.Définir sur x ou plus
}

Ajoutez une tâche wrapper à build.gradle et exécutez la commande gradle wrapper` pour la rendre gradlew version 4.x ou supérieure. Vous pouvez maintenant utiliser gradlew pour créer des applications SpringBoot 2.0.0.

Référence) Spring-Boot-2.0-Release-Notes # gradle-plugin

2. Changement de spécification de spring-boot-gradle-plugin

apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management' // <-- add this to your build.gradle

Avec la mise à niveau de la version, il semble que le plug-in de gestion des dépendances ne soit plus appliqué automatiquement. Vous devez le lire explicitement, alors suivez les instructions pour ajouter une ligne.

Référence) [Spring-Boot-2.0-Migration-Guide # spring-boot-gradle-plugin](https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide # spring-boot-gradle-plugin)

3. Changement de spécification de application.yml (propriétés)

Il semble y avoir un outil de vérification appelé spring-boot-properties-migrator.

Ajouté temporairement à la dépendance de build.gradle.

gradle compilez et démarrez Spring Boot Application. Ensuite, un message inconnu apparaît sur la console. Il vous indiquera les propriétés qui ont changé de nom et les choses qui ont disparu.

Référence) [Spring-Boot-2.0-Migration-Guide # before-you-start](https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide#before- tu commences)

  1. hibernate validator L'annotation NotEmpty du validateur d'hibernation est obsolète. Cela ne m'a pas affecté car je ne l'ai pas utilisé, mais il semble que les annotations telles que NotBlank, Email et ModCheck soient également obsolètes en plus de NotEmpty.

use the standard NotEmpty constraint instead

Parce qu'il y en a, je l'ai corrigé comme ça.

Référence) Hibernate Validator - API dépréciée

5. Spring Mvc JavaConfig

WebMvcConfigurerAdapter est obsolète.

Référence) Spring-javadoc WebMvcConfigurerAdapter.java

as of 5.0 WebMvcConfigurer has default methods (made possible by a Java 8 baseline) and can be implemented directly without the need for this adapter.

Il indique que l'interface WebMvcConfigurer a maintenant une méthode par défaut, vous n'avez donc plus besoin d'adaptateur.

** WebMvcConfig.java avant modification **

WebMvcConfig avant le changement.java


@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter
{
    //Abréviation
}

** WebMvcConfig.java modifié **

WebMvcConfig après modification.java


@Configuration
public class WebMvcConfig implements WebMvcConfigurer
{
    //Abréviation
}
  1. SpringSecurity

Référence) https://docs.spring.io/spring-security/site/docs/5.0.3.RELEASE/reference/htmlsingle/ Référence) https://spring.io/blog/2017/09/15/security-changes-in-spring-boot-2-0-m4 TODO: Résumez le contenu ... peut-être.

7. Divers Thymeleaf

JavaConfig Je ne l'ai pas fait, donc cela ne m'a pas affecté, mais veuillez noter qu'il semble y avoir un changement pour ceux qui le font.

Il est décrit en détail dans la section 2. Modifications de configuration du guide de migration ci-dessous. Référence) Thymeleaf 3 guide de migration de dix minutes

Dialect

Cela a beaucoup changé et l'ancien était l'erreur Zammai: open_hands_tone1 :. J'ai créé un dialecte qui transforme le code de saut de ligne en une balise ``
'', alors je l'ai recréé en faisant référence à ce qui suit.

Référence) Dites bonjour! Extension de Thymeleaf en 5 minutes Référence) Say Hello Again! Extension de Thymeleaf encore plus en 5 minutes supplémentaires

TemplateMode Dans le cas de Thymeleaf2, l'analyseur est basé sur XML et la vérification est très stricte, donc après avoir défini TemplateMode.LEGACYHTML5, nekoHTML a été utilisé comme analyseur HTML, mais il est recommandé d'utiliser TemplateMode.HTML dans Thymeleaf3. Je l'ai changé parce que cela semble avoir été fait. (TemplateMode.LEGACYHTML5 est obsolète.) Au revoir: chat:

The second difference is that the template mode has a value of TemplateMode.HTML. Template modes are not strings anymore and the possible values are a bit different from Thymeleaf 2. We will discuss it in a minute.

Référence) Thymeleaf 3 guide de migration de dix minutes

Supprimer th: syntaxe en ligne

Cela ne provoque pas d'erreur, mais le guide de migration indiqué comme suit. Je n'ai pas utilisé th: inline cette fois, donc ce n'était pas la cible de la correction, mais attention à ne pas l'utiliser accidentellement.

The only change we recommend doing to your templates is removing any th:inline="text" attributes you might have, because they are not needed anymore in order to have output inlined expressions in HTML or XML templates. And it’s just a recommendation — templates will work anyway. But you will benefit from some extra processing performance if you remove those.

Un correctif est recommandé.

Thymeleaf2

<tr th:inline="text" th:each="user : ${users}">
    <td>[[$(user.id)]]</td>
    <td>[[$(user.name)]]</td>
</tr>

Référence) [Thymeleaf2- 12. Traitement en ligne](https://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf_ja.html#%E3%82%A4%E3%83%B3%E3%83%A9% E3% 82% A4% E3% 83% B3% E5% 87% A6% E7% 90% 86)

Thymeleaf3

<tr th:each="user : ${users}">
    <td>[[$(user.id)]]</td>
    <td>[[$(user.name)]]</td>
</tr>

Référence) Thymeleaf3 --12 Inlining

8. Pool de connexion (note supplémentaire)

Le pool de connexions par défaut est passé de Tomcat JDBC Connection Pool à HikariCP. Il a été divulgué car ce n'était pas le moment où la source affectée par la différence d'implémentation a été migrée, mais je vais l'ajouter.

Le Guide de migration indique que ceux qui ont ajouté des dépendances pour utiliser HikariCP n'ont plus besoin de les écrire.

Référence) [Spring-Boot-2.0-Migration-Guide --working-with-sql-databases] (https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide#working-with-sql-databases)

Il a également été écrit dans la documentation de Spring Boot comme ceci.

Production database connections can also be auto-configured by using a pooling DataSource. Spring Boot uses the following algorithm for choosing a specific implementation: 1.We prefer HikariCP for its performance and concurrency. If HikariCP is available, we always choose it. 2.Otherwise, if the Tomcat pooling DataSource is available, we use it. 3.If neither HikariCP nor the Tomcat pooling datasource are available and if Commons DBCP2 is available, we use it.

Référence) Spring-Boot Documents --boot-features-connect-to-production-database

spring.datasource.tomcat.max-wait=10000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.test-on-borrow=true

Je me demande s'il y a un effet si je définis une propriété avec un préfixe comme celui-ci. Le paramètre Hikari CP est `` spring.datasource.hikari. * ''.

fin

Recommended Posts

Mémorandum lorsque Spring Boot 1.5.10 → Spring Boot 2.0.0
Mémorandum WebMvcConfigurer de Spring Boot 2.0 (printemps 5)
Spring Boot Rappelez-vous
Lorsque @Transactional of Spring Boot ne fonctionne pas
Mémorandum sur LOD.
Un mémorandum de dépendance à Spring Boot2 x Doma2
[Java] Lors de l'écriture du source ... Mémorandum ①
Un mémorandum lors de la création d'un service REST avec Spring Boot
Sortie de message (Spring boot)
Erreur inconnue dans la ligne 1 de pom.xml lors de l'utilisation de Spring Boot dans Eclipse
Mémorandum de téléchargement de fichier local avec Spring Boot
L'histoire de la transition de Spring Boot 1.5 à 2.1
Mémorandum d'étude sur l'intégration de Spring ~ Comprendre l'exemple d'intégration de Spring 3. Enricher ~
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
Erreur Javaw.exe lors du démarrage de Spring Boot (STS)
Défi Spring Boot
Forme de botte de printemps
gae + botte à ressort
Mémorandum (Spring Web)
Mémorandum d'étude sur l'intégration de Spring ~ Comprendre l'exemple d'intégration de Spring 1. Hello World ~
Résumé de ce que j'ai appris sur Spring Boot
Mémorandum de l'étude sur l'intégration de Spring ~ Comprendre l'exemple d'intégration de Spring 2. Passerelle JMS ~
[FCM] Implémentation de la transmission de messages en utilisant FCM + Spring boot
L'histoire de la montée de la série Spring Boot 1.5 à la série 2.1
Vérifions la sensation de Spring Boot + Swagger 2.0
Divers tableau de correspondance de Spring Framework et Spring Boot
Remarques sur les annotations lors de l'écriture de tests pour Spring Boot
[Vérification] Comparaison de la vitesse de démarrage de Spring Boot et de Micronaut
Paramètres du gestionnaire de ressources lors de la livraison du SPA avec la fonction de ressource statique de Spring Boot
Spécifiez le codage des ressources statiques dans Spring Boot
Fiche d'apprentissage SPRING BOOT 01
[Note] Fichier de configuration lors de l'utilisation de Logback avec Spring Boot
Botte de printemps + Heroku Postgres
Un mémorandum lors de l'essai de Spring Data JPA avec STS
Exécution asynchrone des requêtes examinée dans Spring Boot 1.5.9
Rédaction de mémo de démarrage de printemps (1)
Accédez au h2db intégré de Spring Boot avec jdbcTemplate
05. J'ai essayé de supprimer la source de Spring Boot
À propos de DI of Spring ①
Première botte à ressort (DI)
Fiche d'apprentissage SPRING BOOT 02
J'ai essayé de réduire la capacité de Spring Boot
Aide-mémoire Spring Boot2
Gestion des exceptions Spring Boot
Mappage du servlet Spring Boot
Environnement de développement-développement Spring Boot-
Procédure d'apprentissage Spring Boot
À propos de DI of Spring ②
Apprentissage de Spring Boot [Début]
Comment utiliser CommandLineRunner dans Spring Batch of Spring Boot
Rédaction de mémos de démarrage de printemps (2)
Créer Restapi avec Spring Boot (jusqu'à l'exécution de l'application)
Résumé du document Spring Boot 2.2
[Spring Boot] DataSourceProperties $ DataSourceBeanCreationException
Comment démarrer par environnement avec Spring Boot de Maven
Disponibilité de l'application Spring Boot 2.3
Tutoriels Spring Boot Sujets