JAX 2018 Spring Boot 2 - Hot Topics

JAX 2018 Spring Boot 2 - Hot Topics

20492a196bb034ad3aa7e05e593fede9?s=128

Michael Simons

April 25, 2018
Tweet

Transcript

  1. 1.

    Spring Boot 2: Hot topics Michael Plöd, @bitboss Michael Simons,

    @rotnroll666 Mainz, 25. April 2018
 JAX 2018
  2. 2.

    2 Spring Boot 2: Hot topics und Migration / @bitboss

    und @rotnroll666 @bitboss Michael Plöd
 Principal Consultant at INNOQ Deutschland GmbH • Interessiert an Software Architektur, aktuell mit Fokus auf Domain-driven Design • Spring Anwender seit 2004 • Twitter: @bitboss
  3. 3.

    3 Spring Boot 2: Hot topics und Migration / @bitboss

    und @rotnroll666 @rotnroll666 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
  4. 4.

    Spring Boot Versionierungsschema 4 • Kein Semantic-Versioning • {major}.{minor}.{micro}.{release_type} •

    major: Signifikante neue Funktionen, nicht unbedingt abwärtskompatibel • minor: Neue Funktionen, idR abwärtskompatibel • micro: Bugfixes, Verbesserungen Spring Boot 2: Hot topics und Migration / @bitboss und @rotnroll666
  5. 5.

    5 • 1.0 am 1. April 2014 • Schneller Start

    für Entwicklung mit Spring • kein Code- oder Konfigurationsgenerator • Extern konfigurierbar • Einheitliches Komponenten-Modell • Eingebetteter Container Spring Boot 2: Hot topics und Migration / @bitboss und @rotnroll666 4 Jahre Spring Boot
  6. 6.

    5 Spring Boot 2: Hot topics und Migration / @bitboss

    und @rotnroll666 4 Jahre Spring Boot • 1.1 am 10. Juni 2014 • Metrics- und Health-Endpunkte • Datenbankmigrationen • Neue Starter • Custom Banner!!
  7. 7.

    5 Spring Boot 2: Hot topics und Migration / @bitboss

    und @rotnroll666 4 Jahre Spring Boot • 1.2 am 11. Dezember 2014 • Servlet 3.1 • @SpringBootApplication • JTA-Transaktionen
  8. 8.

    5 Spring Boot 2: Hot topics und Migration / @bitboss

    und @rotnroll666 4 Jahre Spring Boot • 1.3 am 16. November 2015 • DevTools • Eigenständig ausführbare JARs • Größere Umbauten der Actuator Endpoints für Java 8
  9. 9.

    5 Spring Boot 2: Hot topics und Migration / @bitboss

    und @rotnroll666 4 Jahre Spring Boot • 1.4 am 28. Juli 2016 • Besseres Debugging (Failure- Analyse) • Hibernate 5 • Test-Slices • banner.jpg
  10. 10.

    5 Spring Boot 2: Hot topics und Migration / @bitboss

    und @rotnroll666 4 Jahre Spring Boot • 1.5 am 30. Januar 2017 • Nativer Support für Kafka • Actuator-Erweiterungen für Cloud- Foundry
  11. 11.

    5 Spring Boot 2: Hot topics und Migration / @bitboss

    und @rotnroll666 4 Jahre Spring Boot • 2.0 am 1. März 2018
  12. 12.

    Themen 6 • Neue Grundlagen: Java 8, Spring 5 und

    aktualisierte Abhängigkeiten • Fokus auf reaktive Anwendungsentwicklung • Actuator 2.0 • Spring Security 5 • Spring Data • Todos Spring Boot 2: Hot topics und Migration / @bitboss und @rotnroll666
  13. 13.

    First things first
 
 DAS Enterprise Feature schlechthin! 7 Spring

    Boot 2: Hot topics und Migration / @bitboss und @rotnroll666
  14. 16.

    Java 8, Spring 5 und aktualisierte Abhängigkeiten 9 Spring Boot

    2: Hot topics und Migration / @bitboss und @rotnroll666
  15. 17.

    Java 8 10 Spring Boot 2: Hot topics und Migration

    / @bitboss und @rotnroll666 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { super.configureContentNegotiation(configurer); configurer.favorParameter(true); } } • Type-Inferenz • Lambdas • Default-Methods für diverse Konfigurations-Interfaces,
 Adapter idR deprecated
  16. 18.

    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer { @Override

    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { configurer.favorParameter(true); } } Java 8 10 Spring Boot 2: Hot topics und Migration / @bitboss und @rotnroll666 • Type-Inferenz • Lambdas • Default-Methods für diverse Konfigurations-Interfaces,
 Adapter idR deprecated
  17. 19.

    Spring 5 11 Spring Boot 2: Hot topics und Migration

    / @bitboss und @rotnroll666 • Nullsafe-Apis (@Nullable etc.) • Indizierter Component-Scan (über META-INF/spring.components) • spring-jcl • Massives Baseline-Upgrade • Tomcat 8.5+, Jetty 9.4, • Hibernate 5+ • Depracted Klassen und Methoden wurden entfernt • Framework-Support wurde entfernt • u.a. Portlets, Velocity, Guava Cache
  18. 20.

    Spring 5 12 Spring Boot 2: Hot topics und Migration

    / @bitboss und @rotnroll666 • HTTP/2 • Nativ mit Tomcat 9.x, Jetty 9.4 und Undertow 1.4+ • Ja(va|karta) EE Servlet 4.0 mit Spring 5.1 • HTTP/2 Server Push in Spring MVC mit PushBuilder
  19. 21.

    Aktualisierte Abhängigkeiten mit Spring Boot 2 13 Spring Boot 2:

    Hot topics und Migration / @bitboss und @rotnroll666 • Hibernate 5.2 • Flyway 5 • Spring Data Kay • Spring Security 5 • Thymeleaf 3
  20. 22.
  21. 23.

    Die große Reactive Story 15 Spring Boot 2: Hot topics

    und Migration / @bitboss und @rotnroll666 • Wichtige Neuerung in Spring 5 • Parallel zum bestehenden Ansatz • Kern: robustere und ressourcenschonendere Anwendungen • Reactive Manifest: 
 „elastisch, robust, jederzeit antwortbereit und nachrichtenorientiert.“
  22. 24.

    Exkurs: Mono und Flux 16 Spring Boot 2: Hot topics

    und Migration / @bitboss und @rotnroll666 • Implementierungen eines Publishers der Flow-API • Mono: Publiziert 0 oder 1 Element • Flux: Publiziert n Elemente
  23. 25.

    Marble Diagramm Flux 17 Spring Boot 2: Hot topics und

    Migration / @bitboss und @rotnroll666
  24. 26.

    Spring WebFlux 18 Spring Boot 2: Hot topics und Migration

    / @bitboss und @rotnroll666 Steht gleich- berechtigt neben Spring Web MVC
  25. 27.

    • Neuer Starter:
 • Setzt automatisch @EnableWebFlux • Lauffähig auf

    allen Servlet 3.1 Containern, die Non-Blocking IO API unterstützen, aber auch auf Netty oder Undertow • Basis-Technologie: Project Reactor, alternativ kann RxJava konfiguriert werden. Spring WebFlux 19 Spring Boot 2: Hot topics und Migration / @bitboss und @rotnroll666 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency>
  26. 28.

    Spring WebFlux mit klassischen Annotationen 20 Spring Boot 2: Hot

    topics und Migration / @bitboss und @rotnroll666 @RestController public class DemoRestController { @GetMapping("/helloworld") public Mono<String> getGreeting( @RequestParam(defaultValue = "World") String name ) { return Mono.just("Hello") .flatMap(s -> Mono .just(s + ", " + name + "!\n") ); } }
  27. 29.

    Kotlin-Extensions & Reactive Anwendungen ohne Annotationen 21 Spring Boot 2:

    Hot topics und Migration / @bitboss und @rotnroll666 Ich wechsle mal eben in die IDE
  28. 31.

    Technologieunabhängig 23 Spring Boot 2: Hot topics und Migration /

    @bitboss und @rotnroll666 Gleichermaßen und gleichartig verfügbar für • Spring Web MVC • Spring Web Flux • Jersey / JAX RS • JMX
  29. 32.

    Eigene Endpunkte 24 Spring Boot 2: Hot topics und Migration

    / @bitboss und @rotnroll666 Kennzeichnung über @Endpoint @Endpoint(id = "custom") public class CustomEndpoint { private final AtomicInteger cnt = new AtomicInteger(); @ReadOperation public String someReadOperation() { return "Current value " + cnt.get(); } @WriteOperation public String someWriteOperation() { return "New value " + cnt.incrementAndGet(); } }
  30. 33.

    Eigene Endpunkte 25 Spring Boot 2: Hot topics und Migration

    / @bitboss und @rotnroll666 @ManagementContextConfiguration public class CustomEndpointConfig { @Bean public CustomEndpoint customEndpoint() { return new CustomEndpoint(); } } Instanziierung mittels Java-Config und… org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration = \ de.springbootbuch.actuators.CustomEndpointConfig spring.factories
  31. 34.

    Neuer Basispfad und Namen 26 Spring Boot 2: Hot topics

    und Migration / @bitboss und @rotnroll666 • Alle Endpunkte befinden sich nun unterhalb von /actuator
 konfigurierbar über management.endpoints.web.base-path • Umbenennungen • /trace -> /httptrace • /autoconfig -> /conditions • Entfernt • /actuator (als dezidierter Endpunkt) • /docs
  32. 35.

    Neues JSON-Format 27 Spring Boot 2: Hot topics und Migration

    / @bitboss und @rotnroll666 Downstream-Services müssen angepasst werden für • /actuator/env • /actuator/flyway • /actuator/httptrace • /actuator/mappings • /actuator/metrics • /actuator/liquibase (Neues Format für micrometer.io!!)
  33. 36.

    Spring Security 5 28 Spring Boot 2: Hot topics und

    Migration / @bitboss und @rotnroll666
  34. 37.

    Neue Funktionalitäten 29 Spring Boot 2: Hot topics und Migration

    / @bitboss und @rotnroll666 • OAuth 2.0 Login ist Kernfunktion von Spring Security 5 • Vollständige Kompatibilität zum Reactive Stack • Reactor-Context übernimmt Rolle des Thread-Locals • Modernisierte Passwortspeicherung
  35. 38.

    Modernisierte Passwortspeicherung 30 Spring Boot 2: Hot topics und Migration

    / @bitboss und @rotnroll666 • Entfernung von
 org.springframework.security.authentication.encoding.PasswordEncoder • ShaPasswordEncoder • Md5PasswordEncoder • Neu
 org.springframework.security.crypto.password.*
  36. 39.

    Modernisierte Passwortspeicherung 31 Spring Boot 2: Hot topics und Migration

    / @bitboss und @rotnroll666 DelegatingPasswordEncoder • Hashing neuer Passwörter • Validierung von Passwörtern mit unterschiedlichen Hashformaten • Hash-Format soll in Zukunft einfacher änderbar sein • Neues Format
 {id}encodedPassword • Validierung mit Encoder für entsprechende ID • Default-Encoder möglich für Passwörter ohne ID • Hashing gemäß konfigurierter ID
  37. 41.

    Weniger Autokonfiguration ist mehr 33 Spring Boot 2: Hot topics

    und Migration / @bitboss und @rotnroll666 • Feingranulare Autokonfiguration entfällt • Anpassung über eigene Bean vom Typ WebSecurityConfigurationAdapter • Achtung: Sobald vorhanden, übernimmt Boot keine Konfiguration mehr
  38. 42.

    Nicht mehr über Properties konfigurierbar 34 Spring Boot 2: Hot

    topics und Migration / @bitboss und @rotnroll666 • security.basic.authorize-mode • security.basic.enabled • security.basic.path • security.basic.realm • security.enable-csrf • security.headers.cache • security.headers.content-security-policy • security.headers.content-security-policy-mode • security.headers.content-type • security.headers.frame • security.headers.hsts • security.headers.xss • security.ignored • security.require-ssl • security.sessions Also quasi nichts mehr ;)
  39. 43.

    Standardverhalten entspricht „plain“ Spring Security 5 35 Spring Boot 2:

    Hot topics und Migration / @bitboss und @rotnroll666 • Schutz aller Endpunkte per Default • Content-Negotiation • Form-Login für Browser-ähnliche Requests • Basic-Auth für REST Requests • Integration mit Spring Data
  40. 45.

    Die Neuerungen im Überblick 37 Spring Boot 2: Hot topics

    und Migration / @bitboss und @rotnroll666 • Upgrade auf Spring Data Kay: • Überarbeitung der Repository-API • Eigenständige Kotlin-Unterstützung für Datenklassen, die immutable sind • Deklaration für Nullability-Contraints • Reactive Support, für Stores mit non-blocking APIs • Datastore spezifische Aktualisierungen • Über 550 Changes in 13 Modulen
  41. 46.

    Überarbeitung der Repository-API 38 Spring Boot 2: Hot topics und

    Migration / @bitboss und @rotnroll666 interface CrudRepository<T, ID> extends Repository<T, ID> { S save(S entity); Iterable<S> saveAll(Iterable<S> entities) Optional<T> findById(ID id); boolean existsById(ID id); Iterable<T> findAllById(Iterable<ID> ids); void deleteById(ID id); void delete(T entity); void deleteAll(Iterable<? extends T> entities); } • Neue Methoden-Namen • findOne - findById • Iterable bei save / delete mit All am Ende • ID Typ muss nicht mehr serialisierbar sein
  42. 47.

    Komponierbare Repositories 39 Spring Boot 2: Hot topics und Migration

    / @bitboss und @rotnroll666 • Repositories können mit Spring Data Kay aus aus unterschiedlichen Fragmenten zusammengestellt werden • Die Einschränkung auf eine Basis-Implementierung und eine zusätzliche Implementierung wurde aufgehoben
  43. 48.

    Komponierbare Repositories 40 Spring Boot 2: Hot topics und Migration

    / @bitboss und @rotnroll666 public interface CustomerRepository extends CrudRepository<CustomerEntity, Integer>, PersonFragment, CustomerBulkLoader { } public interface CustomerBulkLoader { void loadCustomers(String fileName); } public class CustomerBulkLoaderImpl implements CustomerBulkLoader { @Override public void loadCustomers(String fileName) { System.out.println("Loading customers from " + fileName); } }
  44. 49.

    Reactive Support für Stores mit non-blocking APIs 41 Spring Boot

    2: Hot topics und Migration / @bitboss und @rotnroll666 • Auch Spring Data folgt der großen „Reactive Story“ von Spring 5 • Aber: nicht alle Datastores / Technologien haben non-blocking APIs (z.B. JPA / JDBC) • Aktuell unterstützt Spring Data Kay folgende Technologien im Hinblick auf reactive: • Redis • MongoDB • Couchbase • Cassandra
  45. 50.

    • Neuer Starter:
 • Repository:
 
 
 Reactive Support am

    Beispiel von MongoDB 42 Spring Boot 2: Hot topics und Migration / @bitboss und @rotnroll666 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb-reactive</artifactId> </dependency> public interface FilmRepository extends ReactiveMongoRepository<Film, String> { @Tailable Flux<Film> streamAllBy(); } Unterstützung für infinite Streams (wurde von @InfiniteStream umbenannt)
  46. 51.

    Reactive Support am Beispiel von MongoDB 43 Spring Boot 2:

    Hot topics und Migration / @bitboss und @rotnroll666 @RestController public class FilmRestController { private final FilmRepository filmRepository; public FilmRestController(FilmRepository filmRepository) { this.filmRepository = filmRepository; } @GetMapping("/api/films") public Flux<Film> getAll() { return filmRepository .findAll(Sort.by("title").ascending()); } } • Verwendung von Reactive Repositories
  47. 52.

    Datastore Spezifische Upgrades 44 Spring Boot 2: Hot topics und

    Migration / @bitboss und @rotnroll666 • MongoDB: • Fluent MongoOperations API • MongoDB Collation Support • Redis: • Split der Client Konfiguration in environment- und client-spezifische Teile
  48. 53.

    Datastore Spezifische Upgrades 45 Spring Boot 2: Hot topics und

    Migration / @bitboss und @rotnroll666 • Spring Data für Apache Cassandra: • Streamlining des Modul-Layouts
 (merge von spring-cql und spring-data-cassandra) • Cassandra Query & Update Objekte • Leichtgewichtige Transaktionen • Elasticsearch: • Upgrade auf 5.4 • Impact auf public APIs (replace von scan() durch scroll()
  49. 54.
  50. 55.

    Harmonisierung von Konfigurationseigenschaften 47 Spring Boot 2: Hot topics und

    Migration / @bitboss und @rotnroll666 • Verringerung der genutzten Präfixe • spring.* • management.* • server.* • server.servlet.* • logging.* <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-properties-migrator</artifactId> <optional>true</optional> </dependency>
  51. 56.

    Duales System Servlet und Reactive 48 Spring Boot 2: Hot

    topics und Migration / @bitboss und @rotnroll666 • Keine transitive Abhängigkeit mehr auf Spring MVC • Geben Sie explizit an, ob Sie MVC oder WebFlux nutzen • Änderung der Package Strukturen • org.springframework.boot.context.embedded ->
 org.springframework.boot.web.embbeded
 Passen Sie entsprechend die Imports und Klassen an
  52. 57.

    Spring Data generell 49 Spring Boot 2: Hot topics und

    Migration / @bitboss und @rotnroll666 • Harmonisierung von Methodennamen • insbesondere findOne -> findById • Optional<T> als Default-Rückgabewert • save und delete für Iterables sind nun saveAll beziehungsweise deleteAll
  53. 58.

    Relationale Datenbanken 50 Spring Boot 2: Hot topics und Migration

    / @bitboss und @rotnroll666 • Spring Boot 2 bringt Flyway 5 mit
 https://flywaydb.org/documentation/releaseNotes#5.0.0 • Vor dem Upgrade auf Spring Boot 2 auf Flyway 4 aktualisieren • Dann erst auf Boot 2 + Flyway 5 • HikariCP per Default
  54. 59.

    Nicht-relationale Datenbanken 51 Spring Boot 2: Hot topics und Migration

    / @bitboss und @rotnroll666 • Lettuce ersetzt Jedis als Default-Redis-Treiber • ElasticSearch nun mindest in 5.4+ • Embedded Variante wird nicht mehr unterstützt
  55. 60.

    Security 52 Spring Boot 2: Hot topics und Migration /

    @bitboss und @rotnroll666 • Konfiguration über Properties ist nicht mehr möglich • Default-Verhalten entspricht nun Spring Security • OAuth wird aktuell komplett überarbeitet • Spring Security Core • Spring Security OAuth • Spring Cloud Security • Spring Boot OAuth2 (Nur für Boot 1.5.x)
 Aktuelle FAQ zu den verschiedenen Modulen
 https://github.com/spring-projects/spring-security/wiki/OAuth-2.0-Features- Matrix • Passwörter müssen idR aktiv migriert werden
  56. 61.

    Security (Passwörter) 53 Spring Boot 2: Hot topics und Migration

    / @bitboss und @rotnroll666 • Default-Encoder in Boot 1 genutzt: • Ihre Passwörter sind als Plain-Text gespeichert. Hashen Sie diese! • Zur absoluten Not mit {noop} präfixen oder NoOpPasswordEncoder als Default-PasswordEncoder konfigurieren (Bitte nicht). • Passwörter sind ohne Salt-Source gehashed • Präfix hinzufügen • Default-Encoder für Validierung konfigurieren http://info.michael-simons.eu/2018/01/13/spring-security-5-new-password- storage-format/
  57. 62.

    Actuator 54 Spring Boot 2: Hot topics und Migration /

    @bitboss und @rotnroll666 • Generell: Anpassung von Downstream-Diensten • Pfade
 (ID / Name nicht länger konfigurierbar) • Formate • Schnittstellen
 https://docs.spring.io/spring-boot/docs/current/actuator-api/html/ • Konfiguration • Security
  58. 63.

    Actuator (Konfiguration) 55 Spring Boot 2: Hot topics und Migration

    / @bitboss und @rotnroll666 Alt Neu endpoints.<id>.* management.endpoint.<id>.* endpoints.cors.* management.endpoints.web.cors.* endpoints.jmx.* management.endpoints.jmx.* management.address management.server.address management.context-path management.server.servlet.context-path management.ssl.* management.server.ssl.* management.port management.server.port Quelle: https:/ /github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide#spring-boot-actuator
  59. 64.

    • Keine spezielle Security-Konfiguration mehr • Kein „sensitive“-Flag mehr •

    Unterscheidung zwischen „enabled“ und „exposed“ • Alle enabled, nur „health“ und „info“ exposed • Konfiguration technologiespezifisch, white oder blacklist • management.endpoints.(web|jmx).exposure.(exclude|include) Actuator (Security) 56 Spring Boot 2: Hot topics und Migration / @bitboss und @rotnroll666
  60. 65.

    public class ApplicationWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter { @Override protected void configure(final

    HttpSecurity http) throws Exception { http .httpBasic().and() .authorizeRequests() .requestMatchers( to( HealthEndpoint.class, InfoEndpoint.class, MetricsEndpoint.class ) ) .permitAll() .requestMatchers(to(EnvironmentEndpoint.class)) .authenticated(); } } Konfiguration von Actuator-Security 57 Spring Boot 2: Hot topics und Migration / @bitboss und @rotnroll666
  61. 66.

    Testen 58 Spring Boot 2: Hot topics und Migration /

    @bitboss und @rotnroll666 • Upgrade von Mockito 1.x auf 2.x • JUnit 5 wird unterstützt
  62. 67.

    59 • Slides: speakerdeck.com/michaelsimons • Spring Boot Buch • Begonnen

    Januar 2017 • Erscheint Dezember 2017, Januar 2018, Februar 2018
 demnächst endlich verfügbar ! • @SpringBootBuch // springbootbuch.de Spring Boot 2: Hot topics und Migration / @bitboss und @rotnroll666 Ressourcen
  63. 68.

    Bildquellen 60 • Heaven Shall Burn: Michael Plöd • Geburtstagskuchen:

    https://www.flickr.com/photos/tillwe/4229605730 • Security: https://unsplash.com/photos/Nfw3-kdOt7o • Todos: https://www.flickr.com/photos/29853404@N03/4579520419/ Spring Boot 2: Hot topics und Migration / @bitboss und @rotnroll666