Série Spring Boot 1 EOL sera atteinte le 1er août 2019 J'ai donc mis à jour la version de Spring Boot vers la série 2 (1.5.2
→ 2.1.5
).
Notez ce que vous avez fait à ce moment-là.
Le guide de migration officiel ci-dessous décrit les méthodes de migration de base et les précautions. Spring Boot 2.0 Migration Guide
J'ai travaillé en lisant le guide officiel de la migration et j'ai cherché sur Google pour résoudre les points incertains ou les points d'achoppement. Nous avons également examiné les notes de publication pour vérifier les changements perturbateurs dans les principales bibliothèques qui modifient les versions principales.
spring-boot-properties-migrator
aux dépendances (* Supprimer après la migration)Dans Spring Boot 2, les clés de propriété et les paramètres définis dans ʻapplication.properties / ʻapplication.yml
ont changé.
Si vous ajoutez spring-boot-properties-migrator
aux dépendances, un journal d'avertissement sera généré au démarrage de l'application s'il y a des propriétés dont les paramètres sont toujours obsolètes. Il fonctionne également temporairement avec l'ancien style d'écriture de la propriété.
Ajoutez la ligne ↓ aux dépendances. (* Supprimer lorsque la migration est terminée)
build.gradle
runtime "org.springframework.boot:spring-boot-properties-migrator"
Dans la 1ère série, le plug-in de gestion des dépendances était inclus dans le plug-in Spring Boot, mais à partir de la 2e série, le plug-in de gestion des dépendances semble être différent. Ajoutez le plug-in de gestion des dépendances à build.gradle.
apply plugin: 'org.springframework.boot'
+ apply plugin: 'io.spring.dependency-management' // <--Ajoute ça
etx {
- springBootVersion = '1.5.2.RELEASE'
+ springBootVersion = '2.1.5.RELEASE'
}
L'augmentation de la version de Sprin Boot augmentera automatiquement la version de diverses bibliothèques.
Changements majeurs cette fois
De plus, la bibliothèque du pool de connexions RDB est passée de «Tomcat JDBC» à «HikariCP».
La tâche bootRepackage
a disparu et est maintenant une tâche nommée bootJar
build.gradle
bootJar {
mainClassName = 'foo.bar.App'
launchScript() // <--avec bootRapackage`executable = true`Si vous avez défini, c'est une alternative
}
Si vous avez lié les propriétés Spring Boot à Java avec @ ConfigurationProperties
ou @ Value
, vous devez unifier la notation du nom de propriété en" Canonical ".
Voir Propriétés canoniques de Spring Boot 2.0 pour plus d'informations.
Fondamentalement, c'était OK si je mettais toutes les minuscules et supprimais "-" et "_"
- @ConfigurationProperties(prefix = "foo-bar.apiKey")
+ @ConfigurationProperties(prefix = "foobar.apikey")
5.1. WebMvcConfigurerAdapter→WebMvcConfigurer
La classe WebMvcConfigurerAdapter
a été déconseillée et remplacée par l'interface WebMvcConfigurer
.
- public class WebMvcConfig extends WebMvcConfigurerAdapter {
+ public class WebMvcConfig implements WebMvcConfigurer {
@GetMapping("/users")
public List<Users> listUsers() {
J'ai préparé un point de terminaison comme celui-ci et y ai accédé depuis le front-end avec un chemin comme GET / users.json
, mais ce n'est plus possible.
C'est OK pour accéder avec GET / users
normalement, donc j'ai supprimé tout .json
.
Cela devient 5.1
→ 8.0
J'ai cherché com.mysql.jdbc.Driver
et l'ai remplacé par com.mysql.cj.jdbc.Driver
.
Il devient «3.9» → «3.11».
En raison de la nouvelle version d'OJOQ, certaines corrections ont été apportées.
C'est une bonne idée de lire les Breaking changes
dans The jOOQ Release Note History.
Après JOOQ3.11.x
, vous devez utiliser gradle-jooq-plugin3.x
plugins {
- id 'nu.studer.jooq' version '2.0.11'
+ id 'nu.studer.jooq' version '3.0.3'
}
Corrigé car le nom du package de l'API a changé
mainDb(sourceSets.main) {
jdbc {
...
}
generator {
- name = 'org.jooq.util.DefaultGenerator'
+ name = 'org.jooq.codegen.DefaultGenerator'
...
database {
- name = 'org.jooq.util.mysql.MySQLDatabase'
+ name = 'org.jooq.meta.mysql.MySQLDatabase'
...
Régénérer le code
while (cursor.hasNext())
- Record record = cursor.fetchOne();
+ Record record = cursor.fetchNext();
Le nom de propriété de application.properties / application.yml est désormais flyway. *
→ spring.flyway. *
application.yml.diff
- flyway:
- enabled: true
+ spring:
+ flyway:
+ enabled: true
Dans Flyway 3 et 4, l'historique d'exécution de Flyway était géré dans une table nommée schema_version
, mais dans 5 séries, il a été renommé en flyway_schema_history
.
Pour continuer à utiliser schema_version
, définissez la propriété spring.flyway.table
dans ʻapplication.properties / ʻapplication.yml
.
application.yml
spring:
flyway:
table: schema_version
De plus, si vous utilisez le plug-in Flyway avec Gradle, définissez-le également.
build.gradle
flyway {
...
table = 'schema_version'
}
- implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity4'
+ implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5' // <---Mise à niveau de Spring Security Dialect
La notation de mise en page a changé depuis Thymeleaf 3. référence:
layout/default.html.diff
<!DOCTYPE html>
<html lang="ja"
xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head>
<meta charset="utf-8"/>
<!-- 「{Titre de chaque page} |Cela devient un titre comme "nom de l'application"-->
- <title layout:title-pattern="$CONTENT_TITLE | $DECORATOR_TITLE">nom de l'application</title>
+ <title layout:title-pattern="$CONTENT_TITLE | $LAYOUT_TITLE">nom de l'application</title>
...
</head>
<body>
<!--Incorporer du HTML commun-->
- <div layout:replace="common/header::partial"></div>
+ <div layout:replace="~{common/header::partial}"></div>
<!--Développez le contenu de chaque page ici-->
<div layout:fragment="content"></div>
</bod>
</html>
sample/index.html.diff
<!DOCTYPE html>
<html
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
xmlns:th="http://www.springframework.org/schema/mvc"
- layout:decorator="layout/default">
+ layout:decorate="~{layout/default}">
<head>
<title>Titre de chaque page</title>
</head>
<body>
<!--Contenu de chaque page-->
<div layout:fragment="content">
Hello World
</div>
</body>
</html>
Depuis le passage de Tomcat JDBC à HikariCP, modifiez les paramètres.
Le nom de la propriété est
spring.datasource.tomcat.*
→ spring.datasource.hikari.*
Sera.
Les éléments qui peuvent être définis avec HikariCP se trouvent dans com.zaxxer.hikari.HikariConfig Il est défini.
À l'origine, Gradle définissait la tâche de construction du frontal et le configurait pour qu'il s'exécute lorsque le pot a été créé.
build.gradle
jar.dependsOn compileFrontend
Cependant, à partir de la série Spring Boot 2, le jar est généré par la tâche bootJar, je l'ai donc changé comme ↓
build.gradle
bootJar.dependsOn compileFrontend
org.dbunit.database.AmbiguousTableNameException: ACCOUNTS
Il semble qu'une erreur se produit lorsqu'une table portant le même nom existe sur plusieurs bases de données.
Je l'ai corrigé en ajoutant le paramètre de requête nullCatalogMeansCurrent = true
à l'URL JDBC.
(Il semble que le comportement par défaut du pilote MySQL JDBC a changé)
TINYINT (1)
dans JOOQjava.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.Byte
En tant que politique lors de l'utilisation de JOOQ, BIT (1)
a été mappé à Boolean et TINYINT (1)
a été mappé à Byte.
Cependant, après la mise à jour vers Spring Boot 2, TINYINT (1)
a été mappé à Boolean et une ClassCastException s'est produite.
Je l'ai corrigé en ajoutant le paramètre de requête tinyInt1isBit = false
à l'URL JDBC.
Le pilote JDBC de MySQL semble traiter «TINYINT (1)» comme «BIT (1)» en interne, et il semble qu'il soit devenu booléen.
java.lang.IllegalArgumentException: The character [_] is never valid in a domain name.
Il semble que la version de Tomcat a été mise à jour et n'accepte plus les noms de domaine contenant _
.
(Il semble étrange que le nom de domaine inclue _
comme spécification RFC.)
→ Puisque _
était inclus dans le sous-domaine, j'ai changé le nom du sous-domaine pour le gérer.
Référence: https://stackoverflow.com/questions/53504857/the-character-is-never-valid-in-a-domain-name
Recommended Posts