Spring Boot 1-Serie EOL wird am 1. August 2019 erreicht Also habe ich die Version von Spring Boot auf 2 Serien aktualisiert (1.5.2
→ 2.1.5
).
Notieren Sie sich, was Sie damals getan haben.
Der folgende offizielle Migrationsleitfaden beschreibt grundlegende Migrationsmethoden und Vorsichtsmaßnahmen. Spring Boot 2.0 Migration Guide
Ich habe beim Lesen des offiziellen Migrationsleitfadens gearbeitet und gegoogelt, um unklare Punkte oder Stolperpunkte zu lösen. Wir haben uns auch die Versionshinweise angesehen, um nach störenden Änderungen in Hauptbibliotheken zu suchen, die Hauptversionen ändern.
In Spring Boot 2 haben sich die in application.properties
/ application.yml
definierten Eigenschaftsschlüssel und Einstellungen geändert.
Wenn Sie Abhängigkeiten mit "spring-boot-properties-migrator" versehen, wird beim Start der Anwendung ein Warnprotokoll ausgegeben, wenn Eigenschaften vorhanden sind, deren Einstellungen noch veraltet sind. Es funktioniert auch vorübergehend mit dem alten Schreibstil für Immobilien.
Fügen Sie den Abhängigkeiten die Zeile ↓ hinzu. (* Entfernen, wenn die Migration abgeschlossen ist)
build.gradle
runtime "org.springframework.boot:spring-boot-properties-migrator"
In der ersten Serie war das Dependency Management-Plug-In im Spring Boot-Plug-In enthalten, in der zweiten Serie scheint sich das Dependency Management-Plug-In jedoch zu unterscheiden. Fügen Sie das Plug-In für das Abhängigkeitsmanagement zu build.gradle hinzu.
apply plugin: 'org.springframework.boot'
+ apply plugin: 'io.spring.dependency-management' // <--Füge das hinzu
etx {
- springBootVersion = '1.5.2.RELEASE'
+ springBootVersion = '2.1.5.RELEASE'
}
Durch Erhöhen der Version von Sprin Boot wird automatisch die Version verschiedener Bibliotheken erhöht.
Diesmal große Änderungen
Außerdem wurde die RDB-Verbindungspoolbibliothek von "Tomcat JDBC" in "HikariCP" geändert.
Die Aufgabe bootRepackage
ist weg und heißt jetzt bootJar
build.gradle
bootJar {
mainClassName = 'foo.bar.App'
launchScript() // <--mit bootRapackage`executable = true`Wenn Sie festgelegt haben, ist dies eine Alternative
}
Wenn Sie Spring Boot-Eigenschaften mit "@ ConfigurationProperties" oder "@ Value" an Java gebunden haben, müssen Sie die Notation des Eigenschaftsnamens mit "Canonical" vereinheitlichen. Weitere Informationen finden Sie unter Canonical-Eigenschaften von Spring Boot 2.0.
Grundsätzlich war es in Ordnung, wenn ich alle Kleinbuchstaben machte und "-" und "_" löschte.
- @ConfigurationProperties(prefix = "foo-bar.apiKey")
+ @ConfigurationProperties(prefix = "foobar.apikey")
5.1. WebMvcConfigurerAdapter→WebMvcConfigurer
Die Klasse "WebMvcConfigurerAdapter" ist veraltet und wurde in die Schnittstelle "WebMvcConfigurer" geändert.
- public class WebMvcConfig extends WebMvcConfigurerAdapter {
+ public class WebMvcConfig implements WebMvcConfigurer {
@GetMapping("/users")
public List<Users> listUsers() {
Ich habe einen Endpunkt wie diesen vorbereitet und vom Frontend aus mit einem Pfad wie "GET / users.json" darauf zugegriffen, aber dies ist nicht mehr möglich. Es ist in Ordnung, normalerweise mit "GET / users" zuzugreifen, daher habe ich alle ".json" gelöscht.
Es wird 5.1
→ 8.0
Ich habe nach "com.mysql.jdbc.Driver" gesucht und durch "com.mysql.cj.jdbc.Driver" ersetzt.
Es wird 3.9
→ 3.11
.
Aufgrund der neuen Version von JOOQ wurden einige Korrekturen vorgenommen.
Es ist eine gute Idee, die "Breaking Changes" in The jOOQ Release Note History durchzulesen.
Nach JOOQ3.11.x
müssen Sie das gradle-jooq-plugin3.x
verwenden
plugins {
- id 'nu.studer.jooq' version '2.0.11'
+ id 'nu.studer.jooq' version '3.0.3'
}
Behoben, weil sich der Paketname der API geändert hat
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'
...
Generieren Sie den Code neu
while (cursor.hasNext())
- Record record = cursor.fetchOne();
+ Record record = cursor.fetchNext();
Der Eigenschaftsname von application.properties / application.yml lautet jetzt flyway. *
→ spring.flyway. *
application.yml.diff
- flyway:
- enabled: true
+ spring:
+ flyway:
+ enabled: true
In Flyway 3 und 4 wurde der Ausführungsverlauf von Flyway in einer Tabelle mit dem Namen "schema_version" verwaltet, in 5 Serien wurde er jedoch in "flyway_schema_history" umbenannt. Um die Verwendung von "schema_version" fortzusetzen, setzen Sie die Eigenschaft "spring.flyway.table" in "application.properties" / "application.yml".
application.yml
spring:
flyway:
table: schema_version
Wenn Sie das Flyway-Plug-In mit Gradle verwenden, stellen Sie es auch dort ein.
build.gradle
flyway {
...
table = 'schema_version'
}
- implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity4'
+ implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5' // <---Spring Security Dialect-Upgrade
Die Layoutnotation wurde von Thymeleaf 3 geändert. Referenz:
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"/>
<!-- 「{Titel jeder Seite} |Es wird ein Titel wie "App-Name"-->
- <title layout:title-pattern="$CONTENT_TITLE | $DECORATOR_TITLE">App Name</title>
+ <title layout:title-pattern="$CONTENT_TITLE | $LAYOUT_TITLE">App Name</title>
...
</head>
<body>
<!--Allgemeine HTML einbetten-->
- <div layout:replace="common/header::partial"></div>
+ <div layout:replace="~{common/header::partial}"></div>
<!--Erweitern Sie hier den Inhalt jeder Seite-->
<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>Titel jeder Seite</title>
</head>
<body>
<!--Inhalt jeder Seite-->
<div layout:fragment="content">
Hello World
</div>
</body>
</html>
Ändern Sie die Einstellungen, da sie von Tomcat JDBC zu Hikari CP geändert wurden.
Der Eigenschaftsname lautet
spring.datasource.tomcat.*
→ spring.datasource.hikari.*
Wird sein.
Elemente, die mit HikariCP festgelegt werden können, befinden sich in com.zaxxer.hikari.HikariConfig. Es ist definiert.
Ursprünglich definierte Gradle eine Aufgabe zum Erstellen des Frontends und zum Ausführen, wenn das Glas erstellt wurde.
build.gradle
jar.dependsOn compileFrontend
Aus der Spring Boot 2-Serie wird jar jedoch von der bootJar-Task generiert, daher habe ich es als ↓ geändert
build.gradle
bootJar.dependsOn compileFrontend
org.dbunit.database.AmbiguousTableNameException: ACCOUNTS
Es scheint, dass ein Fehler auftritt, wenn eine Tabelle mit demselben Namen in mehreren Datenbanken vorhanden ist. Ich habe es behoben, indem ich den Abfrageparameter "nullCatalogMeansCurrent = true" zur JDBC-URL hinzugefügt habe. (Es scheint, dass sich das Standardverhalten des MySQL JDBC-Treibers geändert hat.)
TINYINT (1)
in JOOQjava.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.Byte
Als Richtlinie bei Verwendung von JOOQ wurde "BIT (1)" auf Boolean und "TINYINT (1)" auf Byte abgebildet.
Nach dem Update auf Spring Boot 2 wurde TINYINT (1 )
jedoch Boolean zugeordnet und eine ClassCastException trat auf.
Ich habe es behoben, indem ich den Abfrageparameter "tinyInt1isBit = false" zur JDBC-URL hinzugefügt habe. Der JDBC-Treiber von MySQL scheint TINYINT (1) intern als BIT (1) zu behandeln, und es scheint, dass er boolesch geworden ist.
java.lang.IllegalArgumentException: The character [_] is never valid in a domain name.
Es scheint, dass die Version von Tomcat aktualisiert wurde und keine Domainnamen mehr akzeptiert, die "" enthalten.
(Es scheint seltsam, dass der Domainname "" als RFC-Spezifikation enthält.)
→ Da _
in der Subdomain enthalten war, habe ich den Namen der Subdomain geändert, um damit umzugehen.
Referenz: https://stackoverflow.com/questions/53504857/the-character-is-never-valid-in-a-domain-name
Recommended Posts