Default ComponentScan von SpringBoot

SpringBoot prüft beim Starten alle Packages die in dem gleichen Package und unterhalb des Packages der @SpringBootApplication Annotations Klasse zu finden sind.

Das Default verhalten überschreiben

Möchte man die Struktur der Anwendung umändern, so muss man die Spring Boot mitteilen wo die Komponenten zu finden sind. Anderenfalls wird der Start der Anwendung zu Fehlern führen, da SpringBoot nicht alle Komponenten finden kann. Hierfür kann man z.B. an der Klasse, die die @SpringBootApplication Annotation besitzt, die Annotation @ComponentScan anfügen. Mit ComponentScan(BasePackages = {“”}) kann man als StringArray die Packages angegeben in denen die Komponenten zu finden sind.

Achtung: Komponenten die in oder unterhalb der @SpringBootApplication Klasse sich befinden müssen ebenfalls angegeben werden, da hier das Default Verhalten von SpringBoot überschrieben worden ist.

Spring Boot mit Hibernate

Kommt es beim Starten einer Spring Boot Anwendung zu einer ClassNotFoundException, weil die javax.xml.bind.JAXBException nicht gefunden worden ist, dann fehlt hier die Dependency für JAXB.

Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582) ~[na:na]
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190) ~[na:na]
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499) ~[na:na]

Hibernate benötigt typischerweise JAXB, welches per default ab Java 9 nicht mehr sichtbar ist. Entweder mit –add-modules java.xml.bind zur Laufzeit oder als Abhängigkeit einbinden.

Dependency JAXB hinzufügen

Unter Gradle (letzte Version unter Maven Central suchen JAXB)

compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.0'

Spring Tool Suite

Die Spring Tools Suite ist noch in der Betaphase und noch nicht im Gegensatz zur Eclipse Oxigen oder Photon IDE vollumfänglich (changelog) unter neueren Java Versionen lauffähig. Dieses macht sich in Abstüzen im gesamten Programm bemerkbar. Pivotal empfiehlt STS 4 noch unter Java 8 laufen zu lassen.

Eclipse.ini

Die zu startende VM (siehe WIKI) kann im .ini File angegeben werden.

-vm
/usr/lib/jvm/java-8-openjdk/bin/java

Die Konfiguration von Eclipse bzw. der Spring Tool Suite kann über About –> Installation details –> Configuration abgelesen werden. Hier taucht dann die verwendete JVM auf. java.version=1.8.0_162.

STS 4 unter Archlinux

Im offiziellen Wiki von Archlinux wird auf ein kleines Skript verwiesen um Programme unter einer anderen JVM zu starten.

#!/bin/sh
export PATH=/usr/lib/jvm/java-8-jdk/jre/bin/:$PATH exec "$@"

unter ~/Bin abspeichern und /Bin z.B. in der ./.bashrc zum Pfad hinzufügen.

# add Bin to Path
PATH=${PATH}:~/Bin

Erweiterte Funktionen laufen nur unter JDK

Eine der erweiterten Funktionen laufen nur unter einer JDK. Siehe Eclipse.ini. Dazu gehört z.B. die live hover information.

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'