Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

Wie baue ich eine Spring Boot Library

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité

Consultez-les par la suite

1 sur 15 Publicité

Wie baue ich eine Spring Boot Library

Télécharger pour lire hors ligne

Codineers Meetup Oktober 2022, Dirk Kröhan, (Software-Architekt bei QAware in Mainz.)

== Dokument bitte herunterladen, falls unscharf! Please download slides if blurred! ==

Abstract:
Wie baue ich eine Spring Boot library?
Viele unserer Projekte setzen Spring Boot als Application-Framework ein. In größeren Projekte spielen Cross-Cutting-Concerns wie z.B. Observability, OpenAPI Spec, etc. eine wichtige Rolle. Wäre es da nicht praktisch, wenn man einfach eine Library einbinden könnte und alles funktioniert auf magische Art und Weise ohne eine weitere Zeile Code? Genau darum geht es in diesem Talk!

Wir zeigen euch wie man eine Spring Boot Library erstellt, die den Best Practices folgt und unsere Erfahrungen aus dem SVH Projekt widerspiegeln. Wir beginnen ganz am Anfang und zeigen Beispiele mit Live Coding, um uns immer weiter einzugraben in Themen wie Spring (Auto)Configuration und ConfigurationProperties, Projektstruktur und Testbarkeit.

Codineers Meetup Oktober 2022, Dirk Kröhan, (Software-Architekt bei QAware in Mainz.)

== Dokument bitte herunterladen, falls unscharf! Please download slides if blurred! ==

Abstract:
Wie baue ich eine Spring Boot library?
Viele unserer Projekte setzen Spring Boot als Application-Framework ein. In größeren Projekte spielen Cross-Cutting-Concerns wie z.B. Observability, OpenAPI Spec, etc. eine wichtige Rolle. Wäre es da nicht praktisch, wenn man einfach eine Library einbinden könnte und alles funktioniert auf magische Art und Weise ohne eine weitere Zeile Code? Genau darum geht es in diesem Talk!

Wir zeigen euch wie man eine Spring Boot Library erstellt, die den Best Practices folgt und unsere Erfahrungen aus dem SVH Projekt widerspiegeln. Wir beginnen ganz am Anfang und zeigen Beispiele mit Live Coding, um uns immer weiter einzugraben in Themen wie Spring (Auto)Configuration und ConfigurationProperties, Projektstruktur und Testbarkeit.

Publicité
Publicité

Plus De Contenu Connexe

Similaire à Wie baue ich eine Spring Boot Library (20)

Plus par QAware GmbH (20)

Publicité

Plus récents (20)

Wie baue ich eine Spring Boot Library

  1. 1. qaware.de Wie baue ich eine Spring Boot Library? Dirk Kröhan dirk.kroehan@qaware.de
  2. 2. QAware | 2 Dirk Kröhan Software Architect @ QAware #mainz #java #spring #cloudnative
  3. 3. Wie findet Spring Boot eigentlich die Beans? QAware | 3 ■ Spring scannt alle packages ausgehend von der @SpringBootApplication Klasse ■ Sucht nach Klassen die annotiert sind mit @Controller, @Service, @Repository, @Component ■ In allen @Configuration Klassen alle mit @Bean annotierten Methoden
  4. 4. Wie findet Spring Boot eigentlich die Beans? QAware | 4 ■ Beans aus Spring Boot Auto Configuration Klassen – @Configuration Klasse die in META-INF/spring.factories unter @EnableAutoConfiguration registriert ist ■ Performance Improvement (siehe Stackoverflow Post) org.springframework.boot.autoconfigure.EnableAutoConfiguration= de.qaware.demo.springbootlib.autoconfigure.SpringBootLibAutoConfiguration <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure-processor</artifactId> <optional>true</optional> </dependency>
  5. 5. Lässt sich das debuggen? QAware | 5 ■ In der application.yml folgendes Property setzen: debug: true
  6. 6. Spring Configuration QAware | 6 ■ @Configuration Klasse definiert welche Beans im Application Context sind ■ Nicht zu verwechseln mit: @ConfigurationProperties @Configuration public class MyConfiguration { @Bean public MyService myServiceBean() { return new MyServiceImpl() } }
  7. 7. Conditionals QAware | 7 ■ @ConditionalOnMissingBean erlaubt Library-Nutzern eine Bean mit eigener Implementierung zu “überschreiben” (Customization) ■ @ConditionalOnClass ermöglicht Prüfung auf Jar-Dependencies. Oft für Auto Configuration genutzt, in Kombination mit “provided” scope oder <optional>true</optional> ■ @ConditionalOnProperty um per mylib.enabled: true Funktionalität explizit ein/auszuschalten Tipp: Einfach mal Spring Boot Code lesen! ■ org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration ■ org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration
  8. 8. Configuration Properties QAware | 8 ■ @ConfigurationProperties Klasse, die mit Konfigurationswerten (Properties) gefüllt wird via a. Kommandozeilenparametern b. Umgebungsvariablen c. (Profile-abhängigen) application.(yaml/properties) Dateien im Classpath d. Testkonfiguration-Annotationen @TestPropertySource ■ In Libraries mit @EnableConfigurationProperties auf der Auto-Konfiguration Klasse ■ Folgende Dependency nicht vergessen (sonst ist alles gelb in der IDE): <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
  9. 9. Projektstruktur: Maven Reactor Multi Module Build QAware | 9 mylib-parent - mylib-starter - mylib-autoconfigure - mylib-shaded - mylib-implementation - …
  10. 10. Demo
  11. 11. Shading QAware | 11 ■ Was ist shading? – Verstecke eine Dependency durch package renaming + relocation ■ Apache Maven Shade Plugin – https://maven.apache.org/plugins/maven-shade-plugin/ ■ Wie kann shading helfen bei Autoconfiguration in Libs? – Lib nutzt jmustache (https://github.com/samskivert/jmustache) – Wir wollen nicht, dass andere Autoconfigurations das sehen ■ Siehe auch: https://stackoverflow.com/questions/13620281/what-is-the-maven-shade-plugin-used-for-and- why-would-you-want-to-relocate-java
  12. 12. Shading QAware | 12 DemoApp DemoApp springbootlib jmustache springbootlib jmustache de.qaware.demo.springbootlib.shaded.com.samskivert
  13. 13. Maven provided scope vs optional = true QAware | 13 ■ Beide sorgen dafür, dass C und D nicht transitiv als Dependency für A gelten – Will man Klassen aus C / D in A nutzen muss man diese Dependency in A explizit hinzufügen ■ Provided scope – D wird von der runtime bereitgestellt – Bekannt aus thin jars (WAR) ■ Optional = true – B hat viele Features, eins davon braucht C – Wenn du in A dieses Features willst, include C als Dependency ■ Siehe auch: https://medium.com/@danismaz.furkan/diffe rence-between-optional-true-optional-and- scope-provided-scope-7404ec24fb59 Projekt A (DemoApp) Projekt B (springbootlib) dependency Projekt C Projekt D optional provided
  14. 14. Noch lange nicht fertig… QAware | 14 ■ Integrationstests (Spring MVC / WebFlux / Security) ■ Continuous Integration mit SonarQube Analysis ■ Release & Deployment auf Maven Central, inklusive gleichzeitigem Support für mehrere Spring Boot Versionen ■ Maintenance mit Dependabot Beispiel: https://github.com/qaware/openapi-generator-for-spring Feedback welcome (please open issues!)
  15. 15. qaware.de QAware GmbH Mainz Rheinstraße 4 C 55116 Mainz Tel. +49 6131 21569-0 info@qaware.de twitter.com/qaware linkedin.com/company/qaware-gmbh xing.com/companies/qawaregmbh slideshare.net/qaware github.com/qaware

×