Más contenido relacionado La actualidad más candente (19) Similar a Under the Hood of Reactive Data Access (1/2) (20) Under the Hood of Reactive Data Access (1/2)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
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
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:FireattheBamberFamilyHome(FALv.1.3License)
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/
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:FireattheBamberFamilyHome(FALv.1.3License)
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:FireattheBamberFamilyHome(FALv.1.3License)
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:FireattheBamberFamilyHome(FALv.1.3License)
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:FireattheBamberFamilyHome(FALv.1.3License)
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
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
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:FireattheBamberFamilyHome(FALv.1.3License)
Subscriber
Backpressure
Stream / Flow
Subscribe
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
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
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
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> T insert(T objectToSave)
void insertAll(Collection<…> objects)
<T> List<T> find(Query query, Class<T> type)
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
<T> Mono<T> insert(T objectToSave)
<T> Mono<T> insert(Mono<T> objects)
<T> Flux<T> find(Query query, Class<T> type)
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<Person, String> {
Flux<Person> findByLastname(String lastname);
@Query("{ 'firstname': ?0 }")
Mono<Person> customQuery(String firstname);
Flux<Person> findByLastname(Mono<String> lastname);
}
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<Person, String> {
Flux<Person> findByLastname(String lastname);
@Query("{ 'firstname': ?0 }")
Mono<Person> customQuery(String firstname);
Flux<Person> findByLastname(Mono<String> lastname);
}
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<Person, String> {
Flux<Person> findByLastname(String lastname);
@Query("{ 'firstname': ?0 }")
Mono<Person> customQuery(String firstname);
Flux<Person> findByLastname(Mono<String> lastname);
}
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<Person, String> {
Flux<Person> findByLastname(String lastname);
@Query("{ 'firstname': ?0 }")
Mono<Person> customQuery(String firstname);
Flux<Person> findByLastname(Mono<String> lastname);
}
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<Person, String> {
Flowable<Person> findByLastname(String lastname);
@Query("{ 'firstname': ?0 }")
Maybe<Person> customQuery(String firstname);
Single<Person> findByLastname(Mono<String> lastname);
}
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<Person, String> {
Flowable<Person> findByLastname(String lastname);
@Query("{ 'firstname': ?0 }")
Maybe<Person> customQuery(String firstname);
Single<Person> findByLastname(Mono<String> lastname);
}
25. Learn More. Stay Connected.
Spring Data Examples – Repository @ Github
WebFlux Example – Repository @ Github
24
#springone@s1p
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