[JAVA] Änderungen bei der Migration von Spring Boot 2.0 zu Spring Boot 2.2

Einführung

Ich werde die Korrekturpunkte aufschreiben, wenn ich die Anwendung von Spring Boot 2.0.2 (ca. 7 KB, Serverteil von SPA) auf Spring Boot 2.2.5 migriere.

Spring Boot-Korrekturen

Maven

Ich habe JUnit5 verwendet, aber in Spring Boot 2.0 sind Junit-Platform-Launcher und Mockito-Junit-Jupiter, die nicht unter der Kontrolle von Spring-Boot-Starter-Parent standen, jetzt unter der Kontrolle von Spring Boot 2.2. Die Version muss nicht mehr angegeben werden.

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>

Bean überschreibt Einstellungen

Wenn in Spring Boot 2.0 dieselbe Bean definiert ist, wird die Bean mit "@ Primary" priorisiert. In Spring Boot 2.2 wird bei der Initialisierung eine BeanDefinitionOverrideException-Ausnahme ausgelöst.

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.

Um dies zu vermeiden, legen Sie in application.yml die Eigenschaft spring.main.allow-bean-definition-overriding fest.

SpringBoot2.0


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

Änderung des RestTemplateBuilder-Einstellwerttyps

Beim Festlegen von RestTemplate mithilfe von RestTemplateBuilder wurde die Zeitlimiteinstellung von der Millisekunden-Spezifikation in die Spezifikation "java.time.Duration" geändert, um das Verständnis des Geräts zu erleichtern.

SpringBoot1.5


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

SpringBoot2.0


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

Ändern Sie die Generierungsmethode des Sortierobjekts

Die Methode zum Erstellen des Objekts "org.springframework.data.domain.Sort" in Spring Data wurde von "new" in "by" geändert.

SpringBoot1.5


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

SpringBoot2.0


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

Es scheint, dass es in das weitere Servlet-Paket unter dem Sicherheitspaket verschoben wurde.

Andere

Dies wurde ursprünglich schlecht implementiert, jedoch in der Methode der JPA-Repository-Schnittstelle

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

Ich habe es nicht benutzt. Wenn Sie zu Spring Boot 2.2 wechseln und die App starten,

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).

Ausnahme ist aufgetreten.

Enthält ist eine Suche, die Zeichenfolgen enthält, und ich sollte In anstelle von Enthält verwenden. Warum gab es bisher kein Problem? .. (Ich habe es nicht bemerkt, weil ich es nicht benutzt habe)

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

Zusammenfassung

Es war viel einfacher als Als ich von Spring Boot 1.5 auf 2.0 aktualisiert habe, aber es ist immer noch eine zerstörerische Lösung. Seien Sie also vorsichtig. Wird benötigt.

Recommended Posts

Ä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
Die Geschichte des Übergangs von Spring Boot 1.5 zu 2.1
Versuchen Sie Spring Boot von 0 bis 100.
Rüsten Sie den Federstiefel von der 1.5-Serie auf die 2.0-Serie auf
Vorsichtsmaßnahmen bei der Migration von VB6.0 auf JAVA
Änderungen von Java 8 zu Java 11
Einführung in Spring Boot ~ ~ DI ~
Einführung in Spring Boot ② ~ AOP ~
Wichtige Änderungen in Spring Boot 1.5
Einführung in Spring Boot Teil 1
Ändern Sie die Spring Boot-Validierungsnachricht
Die Geschichte der Erhöhung von Spring Boot von 1.5 auf 2.1 Serie Teil2
Was ich beim Update auf Spring Boot 1.5.12 behoben habe ・ Wovon ich süchtig war
Schreiben und Notizen bei der Migration von VB zu JAVA
ClassCastException tritt bei der Migration von Java7 auf Java8 auf. ~ Generics and overload ~
[Opensaml] NoClassDefFoundError tritt auf, wenn von Tomcat zu Weblogic gewechselt wird
Hinweise zum Zeichencode bei der Migration von Windows auf Mac
Memorandum beim Spring Boot 1.5.10 → Spring Boot 2.0.0
So stellen Sie Spring Boot + PostgreSQL ein
Hinweise zur Migration von CircleCI 1.0 auf 2.0
Verwendung von ModelMapper (Spring Boot)
Spring Boot ab Null Teil 2
Spring Boot ab Null Teil 1
02. Ich habe eine API erstellt, um eine Verbindung von Spring Boot zu MySQL (My Batis) herzustellen.
Ändern Sie die Spring Boot REST API-Anforderung / Antwort von CamelCase in SankeCase
Was ich bei der Migration von der Spring Boot 1.4-Serie zur 2.0-Serie getan habe
Spring Boot 2.0 Actuator, 3 Änderungen, die Sie wissen müssen, damit es funktioniert
Was ich bei der Migration von der Spring Boot 1.5-Serie zur 2.0-Serie getan habe
Woran ich dachte, als ich anfing, von Java nach Kotlin zu migrieren
[Einführung in Spring Boot] Überprüfung der Formularvalidierung
Wichtige Änderungen im Zusammenhang mit Spring Framework 5.0 Test
Übergang von Struts2 zu Spring MVC (Controller)
Javaw.exe Fehler beim Starten von Spring Boot (STS)
So teilen Sie eine Spring Boot-Nachrichtendatei
Fügen Sie Frühlingsstiefel und Gradle zur Sonnenfinsternis hinzu
Fehlerbehebung beim Anheben von Mastodon von v3.0.x auf v3.1.x.
So wenden Sie Thymeleaf-Änderungen sofort mit #Spring Boot + maven auf den Browser an
Wichtige Änderungen in Bezug auf Spring Framework 5.0 Web MVC
[Reverse] Spring Security (von Zeit zu Zeit aktualisiert)
Verwenden Sie den Thymeleaf-Textvorlagenmodus von Spring Boot
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
Verwendung des eingebauten h2db mit Federstiefel
03. Ich habe eine Anfrage von Spring Boot an die Postleitzahlensuch-API gesendet
So verkleinern Sie das Spring Boot Docker-Image
Verwendung von Spring Boot-Sitzungsattributen (@SessionAttributes)
Die Geschichte der Erhöhung der Spring Boot 1.5-Serie auf die 2.1-Serie
[Spring Boot] So rufen Sie Eigenschaften dynamisch aus einer in einer URL enthaltenen Zeichenfolge ab
Versuchen Sie, die Anmeldefunktion mit Spring Boot zu implementieren
Wenn @Transactional of Spring Boot nicht funktioniert
Wichtige Änderungen im Zusammenhang mit dem Spring Framework 5.0 DI-Container
So fügen Sie in Spring Boot einen Klassenpfad hinzu
Migration von der Eclipse-Serverfunktion (Tomcat) zum Einbetten von Tomcat
Einführung in Spring Boot + In-Memory Data Grid
Wenn Sie irgendwo einen Fehler melden möchten, wenn Sie graphql-spring-boot mit Spring Boot verwenden
Hinweise zu Anmerkungen beim Schreiben von Tests für Spring Boot
Spring Boot Form
So binden Sie mit einer Eigenschaftendatei in Spring Boot
Versuchen Sie, die Migration mit Spring Boot Flyway zu automatisieren
[Java] Artikel zum Hinzufügen einer Validierung mit Spring Boot 2.3.1.