Hinter den Kulissen: Die Magie von Spring Boot

Hinter den Kulissen: Die Magie von Spring Boot

Die im Vortrag gezeigte, minimale Spring Boot 2 Reactive-Demo: https://gist.github.com/michael-simons/fcadede6f0b4edbfed2cf2634684733f.

Der im Vortrag geschrieben Starter wird mit Spring Boot 2 obsolet sein, der "Single-User" kommt zurück.

Zusammen mit Spring Boot wird fast immer der Spring Initializr auf http://start.spring.io erwähnt: Eine komfortable REST-Anwendung, mit deren Hilfe sich Entwicklerinnen die Abhängigkeiten einer neuen Anwendung einfach zusammenklicken können.Diese Abhängigkeiten sind in der Regel sogenannte Starter. Starter deklarieren zum einen transitive Abhängigkeiten und bringen eine automatische Konfiguration für das Thema des Starters mit.Die Deklaration des spring-boot-starter-web reicht zum Beispiel vollkommen aus, um nicht nur Spring Web MVC vollständig zu konfigurieren, sondern schließt weiterhin einen eingebetteten Servlet-Container mit ein.In diesem Vortrag spreche ich zuerst über die 4 Säulen von Spring Boot, um anschließend einen Starter „from scratch“ zu erstellen. Der Starter zeigt dabei Dependency Management, automatische Konfiguration in Abhängigkeit von internen und äußeren Bedingungen sowie die Möglichkeiten, Schnittstellen für typsichere und dokumentierte externe Konfiguration zu erstellen.

20492a196bb034ad3aa7e05e593fede9?s=128

Michael Simons

January 25, 2018
Tweet

Transcript

  1. 1.

    Hinter den Kulissen: Die Magie von Spring Boot Michael Simons

    @rotnroll666 Düsseldorf, 25. Januar 2018
 rheinjug
  2. 2.

    2 Hinter den Kulissen: Die Magie von Spring Boot Über

    mich Michael Simons
 Senior Consultant at INNOQ Deutschland GmbH • Erstes Spring Projekt 2009 (Spring 3) • Erstes Spring Boot Projekt Anfang 2014 • Blog zu Java, Spring und Softwarearchitektur unter info.michael-simons.eu • Regt sich auf Twitter als @rotnroll666 über alles mögliche auf
  3. 3.

    3 • Beratung • Konzeption • Entwicklung • Training Hinter

    den Kulissen: Die Magie von Spring Boot INNOQ
  4. 4.

    4 • Begonnen Januar 2017 • Erscheint mit Spring Boot

    2.0 Ende Januar 2018 • Für Einsteiger und Fortgeschrittene • Einstieg über testgetriebene Entwicklung • Die Säulen von Spring Boot • Das Spring Ökosystem • Living in Production • @SpringBootBuch // springbootbuch.de Hinter den Kulissen: Die Magie von Spring Boot Spring Boot Buch
  5. 5.

    5

  6. 6.

    6 • XML-Konfiguration • Komponenten-Scanning • Explizite Java-Konfiguration • Funktionale

    Bean-Registrierung
 (Spring 5) Hinter den Kulissen: Die Magie von Spring Boot Stand heute
  7. 7.

    @SpringBootApplication public class Application { public static void main(String... args)

    { SpringApplication.run(Application.class, args); } } package de.springbootbuch.helloworld; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; 7 A new hope Hinter den Kulissen: Die Magie von Spring Boot
  8. 8.

    package de.springbootbuch.helloworld; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; 7 A new hope

    Hinter den Kulissen: Die Magie von Spring Boot @SpringBootApplication class Application fun main(args: Array<String>) { SpringApplication.run(Application::class.java, *args) }
  9. 10.

    Was genau ist Spring Boot? 9 • Eine Sammlung von

    Libraries? • Ein versteckter Application-Server? • Ein neues Framework? • Eine Runtime? • Nicht per se ein Mikroservice-Framework! Hinter den Kulissen: Die Magie von Spring Boot
  10. 11.

    Spring Boot: Ziele 10 • Schneller Start für Entwicklung mit

    Spring • Sinnvolle Defaults • kein Code- oder Konfigurationsgenerator • nur solange wie nötig • Extern konfigurierbar Hinter den Kulissen: Die Magie von Spring Boot
  11. 12.

    11 Hinter den Kulissen: Die Magie von Spring Boot Spring

    Framework und Ökosystem Spring Boot Verwaltung von Abhängigkeiten Automatische Konfiguration Starter Externe Konfiguration
  12. 15.
  13. 19.

    Starter 18 • Bündeln Abhängigkeiten eines konkreten Aspekts • Stellen

    widerstandsfähige, automatische Konfiguration zur Verfügung Hinter den Kulissen: Die Magie von Spring Boot
  14. 20.

    Was genau „starten“? 19 • Security • Datenbanken • Template

    Engines • Validation • Service Discovery • Vieles mehr: 
 github.com/spring-projects/spring-boot/tree/master/spring-boot-project/ spring-boot-starters Hinter den Kulissen: Die Magie von Spring Boot
  15. 21.

    20 • Starter Modul • Autokonfiguration • JavaConfig • spring.factories

    Hinter den Kulissen: Die Magie von Spring Boot Architektur eines Starters Quelle / https://de.wikipedia.org/wiki/Bogen_(Architektur)#/media/File:Pont_du_Gard_from_river.jpg
  16. 23.

    • OnClassCondition / OnMissingClassCondition • OnBeanCondition / OnMissingBeanCondition • OnPropertyCondition

    22 Hinter den Kulissen: Die Magie von Spring Boot Eine Art Magie? • OnResourceCondition • OnExpressionCondition • OnJavaCondition • OnJndiCondition • OnWebApplicationCondition
  17. 24.
  18. 25.

    Zusammenfassung 24 • @SpringBootApplication schaltet automatische Konfiguration ein • spring.factories

    für @Configuration Klassen nicht vergessen • @AutoConfigureBefore • @Bean Hinter den Kulissen: Die Magie von Spring Boot
  19. 26.

    Auf die Umgebung reagieren 25 • @ConditionalOnClass • @ConditionalOnBean /

    @ConditionalOnMissingBean • @ConditionalOnProperty • Und viele mehr… Hinter den Kulissen: Die Magie von Spring Boot
  20. 27.

    Keine Magie 26 • Spring Diagnostics • --debug Parameter •

    oder Spring Boot Actuator:
 /application/autoconfig Hinter den Kulissen: Die Magie von Spring Boot
  21. 28.

    Eigene Bedingungen 27 • Implementiere o.s.c.annotation.Condition • Erweitere o.s.boot.autoconfigure.SpringBootCondition •

    Verschachtelte Bedingungen mit • AllNestedConditions • AnyNestedCondition • NoneNestedCondition Hinter den Kulissen: Die Magie von Spring Boot
  22. 29.

    static class OnNoBannerButFun extends AllNestedConditions { public OnNoBannerButFun() { super(ConfigurationPhase.REGISTER_BEAN);

    } @ConditionalOnProperty( name = "spring.main.banner-mode", havingValue = "off" ) static class OnBannerTurnedOff {} @ConditionalOnProperty( "springbootbuch-banner.cache-name") static class OnCacheNameSpecified {} @ConditionalOnClass(ObjectMapper.class) @ConditionalOnBean(ObjectMapper.class) static class OnObjectMapperAvailable {} @ConditionalOnBean(CacheManager.class) static class OnCacheManagerAvailable {} } 28 Hinter den Kulissen: Die Magie von Spring Boot
  23. 31.

    Mit externer Konfiguration… 30 • …wird interne / automatische Konfiguration

    beeinflusst • …werden Profile ausgewählt • …wird Fachlichkeit konfiguriert • …wird das Verhalten eines Artefakts im Sinne der 12-factor-app nur aus der Umgebung beeinflusst Hinter den Kulissen: Die Magie von Spring Boot
  24. 32.

    Externe und… 31 Hinter den Kulissen: Die Magie von Spring

    Boot • devtools (1) • Parameter (Kommandozeile sowie Maven- und Gradle-Plugins) (3) • Servletconfig- und Kontext (4) • JNDI (5) • System.getProperties() (6) • Umgebungsvariablen (7) • Property-Dateien für spezifische Profile außerhalb des Artefakts (8) • Property-Dateien außerhalb des Artefakts (10) • @TestPropertySource / @SpringBootTest (2) • Property-Dateien für spezifische Profile innerhalb des Artefakts (9) • Property-Dateien innerhalb des Artefakts (11) interne Konfigurationsquellen
  25. 33.

    Zugriff mittels… 32 • Environment-Instanz • @Value • @ConditionalOnProperty •

    @ConfigurationProperties Hinter den Kulissen: Die Magie von Spring Boot
  26. 34.

    • Core-Container feature • Ermöglicht Spring-Expression-Language-Ausdrücke (SpEL) • Defaults sowohl

    für Ausdrücke 
 ("#{aBean.age ?: 21}“) • Als auch für Properties
 („${someValue:foobar}") • Nachteile: • Kein „relaxed-Binding“ • Keine Gruppierung, Gefahr von Duplikaten 33 @Value("${something}") Hinter den Kulissen: Die Magie von Spring Boot
  27. 35.

    • Spring-Boot feature • Bitte nur im Kontext automatischer Konfiguration

    verwenden! 34 @ConditionalOnProperty Hinter den Kulissen: Die Magie von Spring Boot
  28. 36.

    • Spring-Boot feature • Typsicher (Hinsichtlich Datentypen und „gebündelter“ Konfiguration)

    • Validierbar • Generierung von Metadaten (IDE-Support) • Relaxed-binding 35 @ConfigurationProperties Hinter den Kulissen: Die Magie von Spring Boot
  29. 38.

    Fazit 37 • Spring Boot ist keine Magie: • Infrastruktur

    ist gut dokumentiert
 (Wer ist so verrückt und schreibt dazu noch ein Buch?!) • Starter sind sehr widerstandsfähige (resillient) Erweiterungen • Weniger nebensächliche Komplexität! Hinter den Kulissen: Die Magie von Spring Boot
  30. 39.

    Ein Wort der Warnung 38 • Don’t fight it! •

    „Hacks“ fallen euch i.d.R. auf die Füße • Gibt es eine Konfigurationsoption? • Ist es per eigener Bean konfigurierbar? • Oder über einen dedizierten Customizer? • Falls es nicht passt, nehmt etwas anderes Hinter den Kulissen: Die Magie von Spring Boot
  31. 40.

    39 • Mein GitHub-Profil
 github.com/michael-simons • Slides: speakerdeck.com/michaelsimons • Spring

    Boot Buch: springbootbuch.de • Twitter: @rotnroll666 Hinter den Kulissen: Die Magie von Spring Boot Ressourcen Danke für Eure Zeit!