Neue statische Methoden in Java 9

Die Collection in Java 9 haben alle eine statische Methode .of(…) erhalten. Die Anzahl der fixen Parameter ist auf 10 Elemente in der API begrenzt. Heir kommt Map.ofEntries in Spiel.

Hier ein Beispiel:

// Java 8
Set ss =
Collections.unmodifiableSet(
new HashSet<>(
Arrays.asList("a", "b", "c")));

// Java 9
Set ss = Set.of("a", "b", "c"); // unmodifiable

Map.ofEntries

Mit Map.ofEntries() kann man nun eine unbegrenzte Anzahl an Elementen einfügen.

Map<Integer, Integer> reverse20 = Map.ofEntries(
entry(0, 20),
entry(1, 19),
entry(2, 18),
entry(3, 17),
entry(4, 16),
entry(5, 15),
entry(6, 14),
entry(7, 13),
entry(8, 12),
entry(9, 11),
entry(10, 10),
entry(11, 9),
entry(12, 8),
entry(13, 7),
entry(14, 6),
entry(15, 5),
entry(16, 4),
entry(17, 3),
entry(18, 2),
entry(19, 1),
entry(20, 0)
);

Spring Boot Properties Migrationshilfe

Um die Migration von Anwendungen von 1.x nach 2.0 zu erleichtern, gibt es das spring-boot-properties-migrator Modul. Es ersetzt zur Laufzeit alle alten Keys durch die korrespondieren neuen Keys und gibt Migrationhinweise auf dem Log aus. Es empfiehlt sich also die Abhängigkeit mit einzubinden.

compile group: 'org.springframework.boot', name: 'spring-boot-properties-migrator', version: '2.0.0.RELEASE'

In Spring gibt es mehrere Möglichkeiten woher ein Wert für eine Property kommen kann. In Spring Boot 2.0 wird in Actuator Environment dieses jetzt genau ausgegeben woher der Wert (inkusive Angabe der Zeilennummmer) stammt. Dieses kann zu Debuggingzwecken recht nützich sein, wenn Mal nicht klar sein sollte wie der Wert aktuelle zustande kommt.

Dependency Spring Boot

spring-boot-starter-actuator

Abruf des Actuators Environment

localhost:8080/actuator/env

siehe https://youtu.be/TasMZsZxLCA?t=1863

Die STS (Spring Tools Suite) wurde von Grund auf neu geschrieben und erhält mit der Spring Tools 4 einen neuen Nachfolger. Spring Tools 4 befindet sich aktuell (seit Dezember 2017) in der Betaphase und wird im Juli 2018 den GA Status erlangen. Bis dahin wird STS 3.9.X weiterhin mit Updates versorgt.

Spring 4 Tools ist eine Neuentwicklung und setzt auf das Language Server Protocol (LSP) auf und somit werden alle Features auch in anderen Komponenten (IDEs, Editoren etc.) nutzbar. Unter anderem auch unter VS Code von Microsoft.

Kompatibilität

Komponenten aus STS können auch weiterhin in Spring 4 Tools als AddOn Komponenten genutzt werden.

Alt bekanntes

Das Boot Dashboard View bleibt erhalten. Es erhält aber ein nützliches Feature. Es können Beans und Properties der laufenden Anwenung per Icon angezeigt werden.

Neue Features in Eclipse

Super schnelle Navigation in Spring Projetken

STRG + 66 startet den Dialog.

  • @/
  • @+

Installation

Es gibt das Beta als Bundle oder aber auch als Repository:

  • http://dist.springsource.com/release/TOOLS/sts4/update/e4.7/ <== Oxygen
  • http://dist.springsource.com/release/TOOLS/sts4/update/e4.8/ <== Photon

Alle Information zur Installation findet man unter im Wiki.
Das Changelog findet man hier.

Java 9 Module Support für Jool

Jool ist ein Baustein auf dem Jooq aufbaut. Mit der Modularisierung seit Java 9 müssen noch etliche Java Frameworks an das neue Modulsystem angepasst werden. Mit der Version 0.9.13 wird Jool in 2 Versionen ausgeliefert. Die alte für Java 8 hat ein Suffix -java-8 bekommen.

  • Java 8: ArtifactId jool-java-8
  • Java 9: ArtifactId jool

Spring Boot 2.0 GA

Nach 17 Monaten Entwicklungszeit ist Spring Boot 2.0 GA fertig!

Neues in Spring Boot 2.0

  • Spring Boot wurde auf Java 8 portiert mit Java 9 Unterstüung.
  • Reaktive Web Programming mit Spring WebFlux/WebFlux.fn.
  • Auto-configuration und Starter POMs für reaktive Spring Data Cassandra, MongoDB, Couchbase and Redis.
  • Unterstützung für embedded Netty.
  • Tomcat, Undertow and Jetty unterstützen HTTP/2.
  • Actuator Architektur mit Support für Spring MVC, WebFlux and Jersey.
  • Metriken können mit Micrometer erhoben werden. Es kann nach Atlas, Datadog, Ganglia, Graphite, Influx, JMX, New Relic, Prometheus, SignalFx, StatsD and Wavefront exportiert – werden.
  • Quartz Scheduler Support.
  • Spring Security wurde stark vereinfacht.

Migrationsleitfaden

Die erster große neue Version seit 4 Jahren beinhaltet sehr viele Änderungen. Daher gibt es unter https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide einen Migrationsleitfaden der Entwickler bei der Migration auf Spring Boot 2.0 hilft.

Java 9

Neu ist zu erwähnen das Spring Boot 2.0 auch unter Java 9 läuft. Hierfür gibt es https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-with-Java-9 eine Anleitung und Beschreibung der bekannten Probleme.

SmartGIT

SmartGIT ist ein umfangreicher GIT Client. SmartGIT ist in Java geschrieben und benötigt bis Version 17.1 Java 8. Hat man ein aktuelles ArchLinux oder Manjaro System, dann ist Java in der 9 an Bord.

Java unter ArchLinux

ArchLinux unterstützt parallele Installation von Java Versionen. Diese befinden sich unter dem Vereichnis /usr/lib/jvm/. Der Pfad zur JRE kann im bin Verzeichnis von SmartGIT angegeben werden. Dazu muss in der smartgit.vm die Variabel jre gesetzt werden.

jre=/usr/lib/jvm/java-8-jdk/jre/

Das TmpFS

Das TmpFS erlaubt das schnelle Zwischenspeichern von temporären Dateien im RAM.

Unter ArchLinux und Manjaro wird beim Starten mit Systemd das TmpFS eingehangen. Das RAM Filesystem belegt Arbeitsspeicher und kann auf Geräten mit wenig RAM dazu führen das sich einige Programme nicht kompilieren lassen bzw. durch Swapping enorm verlangsamt werden.

Im Wiki wird beschrieben wie das automatische Einhängen beim Systemstart verhindert werden kann.

Deaktivierung und (Re)aktivierung

systemctl mask tmp.mount # deaktivieren
systemctl unmask tmp.mount # aktivieren

Beim deaktivieren wird ein symbolischer Link auf /dev/null in /etc/systemd/system/tmp.mount erstellt. Unmask entfernt diesen wieder.

Debugger

Der Debugger zeigt jetzt bei method exit und exception breakpoint die Werte an. Rückgabewerte bzw. Grund der Excepiton können direkt im Debugview eingesehen werden. Diese ist praktisch und erspart teilweise Modifikationen am Code um Rückgabewerte einer Funktion zu erkennen.

Rückgabewerte einer Methode

Exception in einer Methode