Hier zeige ich kurz die wichtigsten Änderungen in SpringBoot 2.1 auf. Aktuell ist der 3. Milestone erreicht.
SpringBoot 2.1 M1
Features
- Reaktive Health Indikator für Cassandra
- JUnit 5 @ExtendWith(SpringExtension.class) kann entfallen
Die Annotation @ExtendWith(SpringExtension.class) wird in den @…Test Annotationen annotiert, so dass diese nicht expliziet angegeben werden muss.
@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
class SampleJunitJupiterApplicationTests {
Wird zu…
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
class SampleJunitJupiterApplicationTests {
- Logback unterstützt nun ProfileExpression
- JPA 2.2 wird erreicht (Streaming von ResultSets ist nun möglich)
- Hibernate Metrics werden in Actuator zur Verfügung gestellt
Konfiguration:
spring.jpa.properties.hibernate.generate_statistics=true
-
Support für Undertow 2.0 und Tomcat 9
-
Wenn DevTools im Klassenpfad, dann wird bei Fehlern ein Stacktrace per Default ausgegeben.
Konfiguration:
server.error.include-stacktrace=ALWAYS
Mit dem Update auf Hibernate 5.3.0 Final und Java Persistant Api 2.2 sind das Streamen von ResultsSets möglich.
SpringBoot 2.1 M2
Features
- Es wird verhindert das der MySQL Connector eine alte Version von Protobuf-java als Abhängigkeit einbringt
- Support Java 11
Mit dem Update auf Assertj 3.11 wird Java 11 unterstützt.
- Spring Data JPA Bootstrap Mode kann konfiguriert werden
Es gibt neben DEFAULT zwei neue Initialisierungsarten LAZY und DEFERRED. Mit Lazy und Deferred lassen sich die Startupzeiten der Application zum Teil drastisch reduzieren. Siehe Deferred Example.
Der Unterschied zwischen Lazy und Deferred ist, dass bei Deferred die Validierung vor der ersten Nutzung der Anwendung durchgeführt wird. D.h. nach dem ApplicationContext zur Verfügung steht. Bei Lazy geschied dies erst dann, wenn auf ein Repository das erste Mal zugegriffen wird.
Gerade im Bezug auf kurze TurnAround-Zeiten bei der Entwicklung ist dieses von Vorteil. Ist DEFERRED default, wenn DevTools eingebunden werden?
-
Es gibt einen neuen Starter für OpenID Connect/OAuth2 spring-boot-starter-oauth2-oidc-client
-
Feintuning und Review im Logging
-
FormContentFilter ersetzt HttpPutFormContentFilter
Dependencies
Unter anderem wurde folgende Anhägigkeiten erneuert:
- Lombok 1.18.2
- Influxdb Java 2.12
- Mysql 8.0.12
- Hazelcast 3.10.4
SpringBoot 2.1 M3
Features
- Minimale Version von Gradle wurde auf Version 4.4 angehoben
- Verzögerte Ausgabe der DevTools Loggingeinträge
Mit defer devtools logging kann die Ausgabe der Loggingeinträge bis nach der Ausgabe des SpringBoot Logos verzögert werden.
- Unterstützung von Logging Gruppen
Logger können jetzt zu Gruppen zusammengefasst werden. Somit kann einer Gruppe ein Level zugewiesen werden.
# define group
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
# set level
logging.level.tomcat=TRACE
- Es kann der BackgroundPreinitializer abgeschaltet werden
In bestimmten Umgebungen wo nur eine CPU zur Verfügung steht, macht es keinen Sinn die Initialisierung in den Hintergrund in einem extra Thread zu verlagern. Dieses kostet nur extra CPU Zeit wg. Kontextwechsel.
Beispiel: spring.backgroundpreinitializer.ignore=true # Whether background preinitializer should be ignored.
- JAXB wurde als Abhängigkeit hinzugefügt
Mit Java 10 wurde JAXB als deprecated markiert und mit Java 11 ganz entfernt. Da Java 11 eine LTS Version ist, wurde kurzum JAXB als Abhängigkeit hinzugefügt. Das vermindert auch wieder die Abhängigkeiten in Maven oder Gradle Buildskripten.
- Fehler in der JSON Konfiguration werden jetzt mit einer Exception quittiert
Da nur das Ausgeben von warnings in den Logger zu unvorhersehbaren Verhalten führt, wurde jetzt das Verhalten geändert und eine JsonParseException geworfen.
-
Der Parameter max HTTP header size ist jetzt für alle unterstützten Container gleich
-
Es wird eine Warnung geloggt, wenn die Application als Root läuft
Mit runUser kann dem Startskript mitgeteilt werden unter welchem Benutzer das Programm gestartet werden soll. Ist das Argument runUser nicht angegeben, so wird das Programm unter der ID des Benutzers dem das Skript gehört ausgeführt. Gehört das Skript z.B. Root (UID = 0), dann wird dieses jetzt mitgeloggt.
- Der Object Mapper Jackson wird jetzt als Singleton instanziert
Durch die diese Optimierung werden neue Instanzen des JacksonJsonParser schneller erstellt.
Dependencies
Unter anderem wurde folgende Anhägigkeiten erneuert:
- JUnit Jupiter 5.3.1
- Spring Security 5.1.0.RC2
- Mariadb 2.3.0
- Hibernate 5.3.6.Final
- Spring Framework 5.1.0.RC3