Important: The commits and commit messages have been written very carefully to guide you through reading this project and understanding the talk. Please take your time to study them if you don't understand something.
Wichtig: Die Commits und die Kommentare sind sehr ausführlich und beinhalten wichtige Teile des Vortrages. Vielleicht helfen sie weiter, wenn etwas unverständlich ist.
The slides are inside this repository and also on Speakerdeck:
Keine Magie: Individuelle Spring-Boot-Module
Note: The talk and the slides are in German as W-JAX con is a German conference, the demo, the readme and other artifacts inside this repo are in English in hope they are useful to a broader audience.
Dieses Repository beinhaltet den Foliensatz und die komplette Demo des Vortrages.
Das Ziel des Vortrages ist, zu zeigen, dass die automatische Konfiguration des Spring Frameworks durch Spring Boot keine Magie ist und wie man sich die Möglichkeiten automatischer Konfiguration zu nutze machen kann.
Das Beispiel des Vortrag ist ein eigener Dialekt für die Template Engine Thymeleaef. Es wird ein HTML Tag entwickelt, dass den Spring Boot Banner als ASCII Art innerhalb eines Thymeleaf Templates anzeigen kann.
Dabei werden folgende Themen demonstriert:
- Der korrekte Weg, aus einer Configuration Klasse eine AutoConfiguration Klasse zu machen, die innerhalb eines *-spring-boot-starter.jar automatisch ohne einen "Full-Classpath-Scan" gefunden wird
- Vorstellung der Annotationen
ConditionalOnClass
,ConditionalOnProperty
,ConditionalOnBean
sowie deren Negationen - Möglichkeiten zum Debugging automatischer Konfiguration
Während des Vortrags kam die Frage auf, wie man die Benutzer eines Starters bei der Konfiguration desselben unterstützen könne.
Die üblichen Java IDEs NetBeans, Eclipse und IntelliJ bieten eine Autovervollständigung für die Properties aller möglichen Starter.
Dieses Feature kann sehr einfach für eigene Starter realisiert werden. In Appendix B. Configuration meta-data wird beschrieben, wie eine Datei META-INF/spring-configuration-metadata.json
aussehen muss, die die relevanten Informationen beinhaltet.
Setzt man in seinem Starter Klassen ein, die mit @ConfigurationProperties
annotiert sind, um seine Properties zentral zur Verfügung hab und hat die Attribute der Klassen ordentlich mit JavaDoc Kommentaren dokumentieren, kann obige Datei generieren lassen:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
In meinem wro4j-spring-boot-starter habe ich dies im Commit #a59b3f4 exemplarisch gemacht, das Ergebnis ist direkt sichtbar:
Der Vortrag existiert auch in einer englischen Version, die auf der Spring I/O 2016 vorgestellt wurde. Ein Videomitschnitt ist auf YouTube zu sehen: Customize your Spring Boot experience by writing your own Spring Boot starter.
Gerne über michael-simons.eu oder Twitter, ich bin @rotnroll666.
"Keine Magie: Individuelle Spring-Boot-Module" von Michael J. Simons ist lizenziert unter einer Creative Commons Namensnennung - Nicht-kommerziell - Weitergabe unter gleichen Bedingungen 4.0 International Lizenz.
- "High Voltage Towers": © iStockphoto.com/querbeet
- "Old New Architecture Winnipeg": © iStockphoto.com/photosmash
- "Freddie Mercury": Still from Queens 1986 "A Kind Of Magic" music video