[JAVA] Die Geschichte der Erhöhung von Spring Boot von 1.5 auf 2.1 Serie Teil2

Einführung

Hallo, das ist @chan_kaku Im vorherigen Artikel hier habe ich über das Erhöhen von der Spring Boot 1.5-Serie auf die 2.1-Serie gesprochen. Dieses Mal möchte ich die Schwierigkeiten erwähnen, die ich hatte, als ich nach der vorherigen Migration eine vollständige Migration durchführte.

Warum schreibst du ähnliche Artikel?

Für den Zieldienst, den ich im vorherigen Artikel geschrieben habe, habe ich den mit so wenigen abhängigen Bibliotheken wie möglich ausgewählt, um im Voraus zu wissen, auf welche Punkte ich als vorläufiger Schritt zu dem Dienst, der das Ziel dieser Migration ist, süchtig werden könnte. Es war. Der Zieldienst hängt diesmal von Spring Cloud usw. ab, daher gab es viele Suchtpunkte, die sich von der vorherigen Zeit unterschieden. Deshalb habe ich beschlossen, ihn erneut zu schreiben.

Was ich getan habe (Übersicht)

--Gradle3-Serie → Gradle5-Serie --Spring Boot 1.5-Serie → Spring Boot 2.1-Serie

Was ich getan habe, ich habe das Gefühl, dass es viele Dinge gibt, die ich am Anfang trage. In diesem Artikel werde ich die Unterschiede zum vorherigen schreiben.

SpringBoot 1.5-Serie → Spring Boot 2.1-Serie

Das letzte Mal wurde das Versions-Upgrade von Spring Boot selbst nur durch Hinzufügen von "io.spring.dependency-management" gelöst. Spring Cloud war jedoch die wichtigste Änderung von der 1.5-Serie zur 2.1-Serie.

Änderung 1

Feign Client war eine der Frühlingswolken, die eine bahnbrechende Veränderung hatten. Erstens hat sich die Paketkonfiguration wie folgt geändert

- import org.springframework.cloud.netflix.feign.FeignClient;
+ import org.springframework.cloud.openfeign.FeignClient;

Ursprünglich wurde der Feign-Client von Netflix verwendet, aber er wurde in den Feign-Client von Open Feign geändert. Gleichzeitig hat sich die Schnittstelle geändert, und dieser Bereich muss korrigiert werden. (Per FeignClientException)

Da es sich um einen Teil handelt, der mit externen Diensten verbunden ist, haben wir ihn hier sorgfältig getestet.

Änderung 2

Die nächste Änderung betrifft die Standarddatenquelle in Spring Boot. Tomcat JDBC wurde standardmäßig in der 1.x-Serie verwendet. HikariCP wird jedoch standardmäßig aus der 2.x-Serie verwendet. Nachdem dieser Hikari CP verwendet wurde, ist ein Fehler aufgetreten. Ein Fehler ist aufgetreten, weil die in SpringBoot 2.x-Serie verwendete Version von HikariCP und die in anderen abhängigen Bibliotheken verwendete Version von HikariCP unterschiedlich sind. Die Geschichte hier wurde auch in [Ausgabe] von Spring Boot (https://github.com/spring-projects/spring-boot/issues/16656) erwähnt. Warum also nicht einen Blick darauf werfen?

Ansatz

Dieses Mal wusste ich, dass der Fehler auf eine andere Version von HikariCP zurückzuführen war, daher vermutete ich, dass die Version von Spring JDBC irgendwo anders war. Da ich jedoch nicht wusste, welche Spring JDBC-Version älter ist, habe ich den Gradle-Befehl "Abhängigkeiten" verwendet. Diese Aufgabe ist ein Befehl, der mit gradle ausgeführt werden kann, ohne eine Abhängigkeit hinzuzufügen, und wie folgt ausgeführt werden kann

./gradlew dependencies

Sie können den Abhängigkeitsbaum überprüfen, indem Sie diesen Befehl ausführen! Ich habe mir den von diesem Befehl generierten Abhängigkeitsbaum angesehen und eine ältere Version der Bibliothek gefunden, sodass ich den Fehler beheben konnte, indem ich Spring JDBC von dort ausgeschlossen habe. Insbesondere die Version von Spring JDBC, von der die neueste Version von org.seasar.doma.boot: doma-spring-boot-Starter abhing, war alt, daher habe ich Spring JDBC wie folgt ausgeschlossen.

build.gradle


implementation("org.seasar.doma.boot:doma-spring-boot-starter:1.1.1") {
        exclude group: "org.springframework.boot", module: "spring-boot-starter-jdbc"
}

Dinge, die noch nicht gelöst wurden

Mit der obigen Problemumgehung können Sie jetzt das Glas ausführen. Wenn ich jedoch bootRun von gradle aus starte, wird der folgende Fehler angezeigt:

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication
        at jp.furyu.hoge.api.HogeApiApplication.main(HogeApiApplication.java:14)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 1 more

In diesem Projekt wird classPath mit der Option bootRun neu geschrieben. Dies wird jedoch neu geschrieben, da in Windows anscheinend ein Fehler auftritt, wenn viele Abhängigkeiten von diesem Projekt bestehen. Hier in der Nähe enthält weitere Details. Schauen Sie also bitte vorbei! Es scheint, dass bootRun aufgrund dieses Umschreibens von classPath nicht möglich ist, aber ich kenne die Lösung nicht und sie wird derzeit untersucht (Juli 2019). Ich werde es hinzufügen, sobald ich eine Lösung gefunden habe!

Nachtrag (08.08.2019)

Bei der Benennung des JARs wurde es bisher in der JAR-Option von build.gradle wie folgt beschrieben

build.gradle


jar {
    archiveBaseName = "hoge"
    archiveFileName = "${archiveBaseName}.jar"
    version = "1.0.0"
}

Es gibt kein Problem, wenn ein JAR lokal erstellt wird. Wenn Sie jedoch ein JAR mit CI erstellen, kann der Stammname des Projekts unterschiedlich sein, und dieses Phänomen, dass es nicht zu "archiveBase.jar" wird, ist aufgetreten. Wenn ich den angegebenen JAR-Namen in der CI-Umgebung verwenden wollte, bestand die Problemumgehung dieses Mal darin, settings.gradle wie folgt hinzuzufügen.

settings.gradle


rootProject.name = 'hoge'

Durch Hinzufügen von "rootProject.name" zu settings.gradle ändert sich der Name des JARs auch in der CI-Umgebung nicht.

Schließlich

Die SpringBoot 1.5.x-Serie wird im August 2019 EOL sein. Wenn Sie sie also noch nicht unterstützt haben, sollten Sie sich wirklich beeilen. Ich hoffe, dieser Artikel ist für alle hilfreich!

Recommended Posts

Die Geschichte der Erhöhung von Spring Boot von 1.5 auf 2.1 Serie Teil2
Die Geschichte der Erhöhung der Spring Boot 1.5-Serie auf die 2.1-Serie
Rüsten Sie den Federstiefel von der 1.5-Serie auf die 2.0-Serie auf
Die Geschichte des Übergangs von Spring Boot 1.5 zu 2.1
Was ich bei der Migration von der Spring Boot 1.4-Serie zur 2.0-Serie getan habe
Was ich bei der Migration von der Spring Boot 1.5-Serie zur 2.0-Serie getan habe
Versuchen Sie Spring Boot von 0 bis 100.
Einführung in Spring Boot Teil 1
05. Ich habe versucht, die Quelle von Spring Boot zu löschen
Ich habe versucht, die Kapazität von Spring Boot zu reduzieren
Über die Funktion von Spring Boot aufgrund unterschiedlicher Versionen
Eine Geschichte voller Grundlagen von Spring Boot (gelöst)
Spring Boot ab Null Teil 2
Spring Boot ab Null Teil 1
Ich möchte die Standardfehlermeldung von Spring Boot steuern
Die Geschichte der Begegnung mit Spring Custom Annotation
Die Geschichte von RxJava, das unter NoSuchElementException leidet
Änderungen bei der Migration von Spring Boot 1.5 auf Spring Boot 2.0
Änderungen bei der Migration von Spring Boot 2.0 zu Spring Boot 2.2
[Spring Boot] Ich habe untersucht, wie die Nachbearbeitung der empfangenen Anforderung implementiert werden kann.
Schritte zum Ausführen von Spring Boot beziehen sich auf die Werte in der Eigenschaftendatei
Die Geschichte des Wechsels von Amazon RDS für MySQL zu Amazon Aurora Serverless
Ändern Sie den Raum mit halber Breite von STS (Spring Tool Suite) von "u" in "・".
Die Geschichte der Einführung der Ajax-Kommunikation in Ruby
Lassen Sie uns das Gefühl von Spring Boot + Swagger 2.0 überprüfen
Die Geschichte des Hinzufügens der neuesten Node.js zu DockerFile
[Spring Boot] So verweisen Sie auf die Eigenschaftendatei
03. Ich habe eine Anfrage von Spring Boot an die Postleitzahlensuch-API gesendet
So legen Sie Umgebungsvariablen in der Eigenschaftendatei der Spring-Boot-Anwendung fest
Geben Sie die statische Ressourcencodierung in Spring Boot an
Von der Einführung des Geräts bis zur Erstellung der Benutzertabelle
Wie schreibe ich Scala aus der Perspektive von Java
Ein Memorandum über die Sucht nach Spring Boot2 x Doma2
Greifen Sie mit jdbcTemplate auf das integrierte h2db des Spring Boot zu
Bis zur Verwendung von Spring Data und JPA Part 2
Verwendung von CommandLineRunner im Spring Batch von Spring Boot
Bis zur Verwendung von Spring Data und JPA Part 1
Stellen Sie das Spring Boot-Projekt in XAMPP für Tomcat bereit
Booten nach Umgebung mit Spring Boot of Maven
Eine Aufzeichnung über das Studium des Spring Framework von Grund auf neu
[Vergleichsüberprüfung] Wie unterschiedlich ist die Entwicklungsproduktivität der Spring Boot-App von der Vergangenheit?
[Spring Boot] Die Geschichte, dass die Bean der Klasse mit der Annotation ConfigurationProperties nicht gefunden wurde
Kommen Sie zu den Abkürzungen aus den fünf Beispielen für kursive Java-Listen
Stellen Sie Spring Boot-Anwendungen für Heroku bereit, ohne die Heroku-CLI zu verwenden
20190803_Java & k8s on Azure Die Geschichte vom Festivalbesuch
[Java] Stellen Sie die Spring Boot-Anwendung für den Azure App Service bereit
Schneiden Sie SQL in die Eigenschaftendatei mit jdbcTemplate von Spring Boot aus
Die Geschichte des Werfens von BLOB-Daten von EXCEL in DBUnit
Stellen Sie die von Spring Boot erstellte Anwendung für Heroku (öffentlich) bereit ②
Einführung in Spring Boot ~ ~ DI ~
So erhalten Sie die längsten Informationen von Twitter ab dem 12.12.2016
Einführung in Spring Boot ② ~ AOP ~
Stellen Sie die von Spring Boot erstellte Anwendung für Heroku (öffentlich) bereit ①
Die Geschichte, Java mithilfe der BitBucket-Pipeline nach Heroku zu bringen
[Apache Tomcat] Die Geschichte der Verwendung von Apache OpenWebBeans zum Aktivieren von CDI
Eine Geschichte, die mich bedauerte, als während der Entwicklung der Spring Boot-App eine "NotReadablePropertyException" auftrat.
Seit ich von Spring Boot (Java) zu Ruby on Rails gewechselt bin, habe ich meine Lieblingspunkte von Rails zusammengefasst
Ich möchte die Methode des Controllers kennen, bei der die Ausnahme im ExceptionHandler von Spring Boot ausgelöst wurde