Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Reactive Spring Data

Mark Paluch
December 05, 2017

Reactive Spring Data

Slides to the SpringOne Platform 2017 talk.

Links:

* Spring Data Examples: https://github.com/spring-projects/spring-data-examples
* WebFlux Example: https://github.com/mp911de/reactive-spring/tree/redis-message-container

Mark Paluch

December 05, 2017
Tweet

More Decks by Mark Paluch

Other Decks in Programming

Transcript

  1. Reactive Spring Data
    Mark Paluch @mp911de
    Christoph Strobl @stroblchristoph
    1

    View Slide

  2. View Slide

  3. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
    Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
    Spring Data Modules
    3
    JPA

    View Slide

  4. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
    Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
    Reactive Spring Data Modules
    4
    JPA

    View Slide

  5. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a

    Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
    image: Fire at the Bamber Family Home (FAL v.1.3 License)

    View Slide

  6. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a

    Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/

    View Slide

  7. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a

    Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
    image: Fire at the Bamber Family Home (FAL v.1.3 License)

    View Slide

  8. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a

    Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
    image: Fire at the Bamber Family Home (FAL v.1.3 License)

    View Slide

  9. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a

    Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
    image: Fire at the Bamber Family Home (FAL v.1.3 License)

    View Slide

  10. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a

    Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
    image: Fire at the Bamber Family Home (FAL v.1.3 License)

    View Slide

  11. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
    Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
    Today’s data access
    • Keep resources busy
    • Connection contention
    • Usually synchronous/blocking
    • Multiple requests
    • Asynchronous isn’t always a good answer
    X

    View Slide

  12. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
    Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
    Reactive data access
    • Asynchronous
    • Non Blocking
    • Event Driven
    • Data as stream
    11

    View Slide

  13. Publisher
    Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a

    Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
    image: Fire at the Bamber Family Home (FAL v.1.3 License)
    Subscriber
    Backpressure
    Stream / Flow
    Subscribe

    View Slide

  14. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
    Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
    What it takes…
    Project Reactor 3.1
    Spring Framework 5.0
    Spring Data 2.0
    A reactive (asynchronous, ideally non-blocking) driver
    Optional: Spring Boot 2.0 (Milestone)
    13

    View Slide

  15. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
    Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
    What about JDBC/JPA?
    JDBC is a blocking API
    JPA is a blocking API
    Sorry, no reactive JPA support
    14

    View Slide

  16. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
    Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
    Reactive Spring Data
    Reactive Template API
    Reactive Repository support
    Reduced feature set
    15

    View Slide

  17. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
    Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
    Imperative Template API
    16
    T insert(T objectToSave)
    void insertAll(Collection<…> objects)
    List find(Query query, Class type)

    View Slide

  18. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
    Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
    Reactive Template API
    17
    Mono insert(T objectToSave)
    Mono insert(Mono objects)
    Flux find(Query query, Class type)

    View Slide

  19. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
    Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
    Reactive Repository API
    18
    interface ReactivePersonRepository extends
    ReactiveCrudRepository {


    Flux findByLastname(String lastname);


    @Query("{ 'firstname': ?0 }")

    Mono customQuery(String firstname);
    Flux findByLastname(Mono lastname);
    }

    View Slide

  20. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
    Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
    Reactive Repository API
    19
    interface ReactivePersonRepository extends
    ReactiveCrudRepository {


    Flux findByLastname(String lastname);


    @Query("{ 'firstname': ?0 }")

    Mono customQuery(String firstname);
    Flux findByLastname(Mono lastname);
    }

    View Slide

  21. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
    Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
    Reactive Repository API
    20
    interface ReactivePersonRepository extends
    ReactiveCrudRepository {


    Flux findByLastname(String lastname);


    @Query("{ 'firstname': ?0 }")

    Mono customQuery(String firstname);
    Flux findByLastname(Mono lastname);
    }

    View Slide

  22. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
    Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
    Reactive Repository API
    21
    interface ReactivePersonRepository extends
    ReactiveCrudRepository {


    Flux findByLastname(String lastname);


    @Query("{ 'firstname': ?0 }")

    Mono customQuery(String firstname);
    Flux findByLastname(Mono lastname);
    }

    View Slide

  23. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
    Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
    Reactive Repository API
    22
    interface ReactivePersonRepository extends
    RxJava2CrudRepository {


    Flowable findByLastname(String lastname);


    @Query("{ 'firstname': ?0 }")

    Maybe customQuery(String firstname);
    Single findByLastname(Mono lastname);
    }

    View Slide

  24. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
    Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
    Reactive Repository API
    23
    interface ReactivePersonRepository extends
    RxJava2CrudRepository {


    Flowable findByLastname(String lastname);


    @Query("{ 'firstname': ?0 }")

    Maybe customQuery(String firstname);
    Single findByLastname(Mono lastname);
    }

    View Slide

  25. Learn More. Stay Connected.
    Spring Data Examples – Repository @ Github
    WebFlux Example – Repository @ Github
    24
    #springone
    @s1p

    View Slide

  26. Disclaimer

    View Slide

  27. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
    Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
    Safe Harbor Statement
    The following is intended to outline the general direction of Pivotal's offerings. It is
    intended for information purposes only and may not be incorporated into any
    contract. Any information regarding pre-release of Pivotal offerings, future updates or
    other planned modifications is subject to ongoing evaluation by Pivotal and is subject
    to change. This information is provided without warranty or any kind, express or
    implied, and is not a commitment to deliver any material, code, or functionality, and
    should not be relied upon in making purchasing decisions regarding Pivotal's
    offerings. These purchasing decisions should only be based on features currently
    available. The development, release, and timing of any features or functionality
    described for Pivotal's offerings in this presentation remain at the sole discretion of
    Pivotal. Pivotal has no obligation to update forward looking information in this
    presentation.
    26

    View Slide