SlideShare a Scribd company logo
Not Only Reactive Data Access

with Spring Data
Christoph Strobl
John Blum
1
@stroblchristoph
@john_blum
Not Only Reactive - Data Access with Spring Data
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/
15 Modules. over 700 issues fixed. Let’s move…
3
Core Themes
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/
java.lang.Serializable
5
public interface CrudRepository<T, ID extends Serializable> … {

T findOne(ID id);
…
}
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/
java.lang.Serializable
6
public interface CrudRepository<T, ID> extends Repository<T, ID>{

T findOne(ID id);
…
}
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/
java.util.Optional
7
public interface CrudRepository<T, ID> extends Repository<T, ID>{

T findOne(ID id);
…
}
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/
java.util.Optional
8
public interface CrudRepository<T, ID> extends Repository<T, ID>{

Optional<T> findOne(ID id);
…
}
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/
Naming
9
public interface CrudRepository<T, ID> extends Repository<T, ID>{

Optional<T> findOne(ID id);
Iterable<T> findAll(Iterable<ID> ids);
Iterable<S> save(Iterable<S> entities);
void delete(ID id);
…
}
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/
Naming
10
public interface CrudRepository<T, ID> extends Repository<T, ID>{

Optional<T> findById(ID id);
Iterable<T> findAllById(Iterable<ID> ids);
Iterable<S> saveAll(Iterable<S> entities);
void deleteById(ID id);
…
}
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/
Composable Interfaces
11
interface Repo extends Repository<T, ID>, Custom {
…
}
interface Custom {
…
}
class RepoImpl implements Custom {
…
}
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/
Composable Interfaces
12
interface Repo extends Repository<T, ID>, Custom {
…
}
interface Custom {
…
}
class CustomImpl implements Custom {
…
}
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/
Composable Interfaces
13
interface Repo extends Repository<T, ID>, Custom, Mixin {
…
}
interface Custom {
…
}
class CustomImpl implements Custom {
…
}
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/
@Nullable, @NonNull & @NonNullApi
14
public interface Specification<T> {
//…
@Nullable
Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, …)
}
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/
@Nullable, @NonNull & @NonNullApi
15
public interface Repo extends Repository<T, ID> {
@NonNull
T findByFirstname(String firstname);
}
< / >
code
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/
Kotlin Extensions (specific projects only)
16
var template: MongoTemplate
template.updateFirst(query, update, Domaintype::class)
val users = template.findAll<DomainType>()
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/
SpEL Enhancements for Projections
17
public interface MyProjection {
@Value("#{@bean.method(target, args[0])}")
String invokeBeanWithParameter(Integer parameter);
}
< / >
code
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/
…and more
new return type: org.springframework.data.util.Streamable
Automatic Modules names
Support for Vavr
…
18
Store Specifics
MongoDB
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/
Builder Style Template API
21
template.find(query(where("name").is("luke"), Person.class, "star-wars",
Jedi.class);
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/
Builder Style Template API
22
template.query(Person.class)
.inCollection("star-wars")
.as(Jedi.class)
.matching(query(where("name").is("luke"))
.all();
< / >
code
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/
Untyped Query By Example
23
Person probe = new Person("luke");
operations.query(Person.class)
.matching(query(byExample(of(probe, ExampleMatcher.matching()))))
.all();
{
"first_name" : "luke",
"_class" : { "$in" : ["Person"] }
}
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/
Untyped Query By Example
24
Person probe = new Person("luke");
operations.query(Person.class)
.matching(query(byExample(of(probe, ExampleMatcher.matching()
.withIgnorePaths("_class")))))
.all();
{
"first_name" : "luke"
}
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/
Untyped Query By Example
25
Person probe = new Person("luke");
operations.query(Person.class)
.matching(query(byExample(of(probe, UntypedExampleMatcher.matching()))))
.all();
{
"first_name" : "luke"
}
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/
ReactiveMongoOperations
26
<T> List<T> findAll(Class<T> entityClass, String collectionName);
<T> T findOne(Query query, Class<T> entityClass);
…
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/
ReactiveMongoOperations
27
<T> Flux<T> findAll(Class<T> entityClass, String collectionName);
<T> Mono<T> findOne(Query query, Class<T> entityClass);
…
< / >
code
< / >
code
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/
Infinite Streams
28
Flux<Document> inf = template.tail(query, Document.class, "collection");
Disposable disposable = inf.doOnNext(…).subscribe();
// …
disposable.dispose();
ATTENTION
more in next

session
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/
…and more
MongoDB 3.6 support
Aggregation Enhancements
Collation support
…
29
Redis
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/
Redis Cache
31
public CacheManager cacheManager(RedisTemplate template) {
RedisCacheManager cacheManager = new RedisCacheManager(template);
cacheManager.setDefaultExpiration(10L);
return cacheManager;
}
public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate template = new RedisTemplate();
template.setConnectionFactory(connectionFactory);
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return template;
}
public RedisConnectionFactory connectionFactory() …
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/
Redis Cache
32
public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofSeconds(10))
.serializeValuesWith(fromSerializer(json()));
return RedisCacheManager.builder(connectionFactory)
.cacheDefaults(configuration)
.withInitialCacheConfigurations(singletonMap("person", 

RedisCacheConfiguration.defaultCacheConfig()))
.build();
}
public RedisConnectionFactory connectionFactory() …
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/
Split up RedisConnection
33
append
bgReWriteAof
bgSave
bgWriteAof
bitCount
bitCount
bitOp
bLPop
bRPop
bRPopLPush
close
closePipeline
dbSize
decr
decrBy
del
discard
dump
echo
eval
evalSha
evalSha
geoRemove
get
getBit
getClientList
getClientName
getConfig
getNativeConnection
getRange
getSentinelConnection
getSet
getSubscription
hashCommands
hDel
hExists
hGet
hGetAll
hIncrBy
hIncrBy
hKeys
hLen
hMGet
hMSet
lLen
lPop
lPush
lPushX
lRange
lRem
lSet
lTrim
mGet
migrate
migrate
move
mSet
mSetNX
multi
openPipeline
persist
pExpire
pExpireAt
pfAdd
pfCount
pfMerge
scriptKill
scriptLoad
sDiff
sDiffStore
select
serverCommands
set
set
setBit
setClientName
setCommands
setConfig
setEx
setNX
setRange
shutdown
shutdown
sInter
sInterStore
sIsMember
slaveOf
slaveOfNoOne
watch
zAdd
zAdd
zCard
zCount
zCount
zIncrBy
zInterStore
zInterStore
zRange
zRangeByLex
zRangeByLex
zRangeByLex
zRangeByScore
zRangeByScore
zRangeByScore
zRangeByScore
zRangeByScore
zRangeByScore
zRangeByScoreWithScores
zRangeByScoreWithScores
zRangeByScoreWithScores
exec
execute
exists
exists
expire
expireAt
flushAll
flushDb
geoAdd
geoAdd
geoAdd
geoAdd
geoCommands
geoDist
geoDist
geoHash
geoPos
geoRadius
geoRadius
geoRadiusByMember
geoRadiusByMember
geoRadiusByMember
hScan
hSet
hSetNX
hStrLen
hVals
hyperLogLogCommands
incr
incrBy
incrBy
info
info
isClosed
isPipelined
isQueueing
isSubscribed
keyCommands
keys
killClient
lastSave
lIndex
lInsert
listCommands
ping
pSetEx
pSubscribe
pTtl
pTtl
publish
randomKey
rename
renameNX
resetConfigStats
restore
rPop
rPopLPush
rPush
rPushX
sAdd
save
scan
sCard
scriptExists
scriptFlush
scriptingCommands
sMembers
sMove
sort
sort
sPop
sPop
sRandMember
sRandMember
sRem
sScan
stringCommands
strLen
subscribe
sUnion
sUnionStore
time
touch
ttl
ttl
type
unlink
unwatch
zRangeByS
zRangeWit
zRank
zRem
zRemRange
zRemRange
zRemRange
zRevRange
zRevRange
zRevRange
zRevRange
zRevRange
zRevRange
zRevRange
zRevRange
zRevRange
zRevRange
zRevRank
zScan
zScore
zSetComma
zUnionSto
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/
Split up RedisConnection
34
append
bgReWriteAof
bgSave
bgWriteAof
bitCount
bitCount
bitOp
bLPop
bRPop
bRPopLPush
close
closePipeline
dbSize
decr
decrBy
del
discard
dump
echo
eval
evalSha
evalSha
geoRemove
get
getBit
getClientList
getClientName
getConfig
getNativeConnection
getRange
getSentinelConnection
getSet
getSubscription
hDel
hExists
hGet
hGetAll
hIncrBy
hIncrBy
hKeys
hLen
hMGet
hMSet
lLen
lPop
lPush
lPushX
lRange
lRem
lSet
lTrim
mGet
migrate
migrate
move
mSet
mSetNX
multi
openPipeline
persist
pExpire
pExpireAt
pfAdd
pfCount
pfMerge
scriptKill
scriptLoad
sDiff
sDiffStore
select
set
set
setBit
setClientName
setConfig
setEx
setNX
setRange
shutdown
shutdown
sInter
sInterStore
sIsMember
slaveOf
slaveOfNoOne
watch
zAdd
zAdd
zCard
zCount
zCount
zIncrBy
zInterStore
zInterStore
zRange
zRangeByLex
zRangeByLex
zRangeByLex
zRangeByScore
zRangeByScore
zRangeByScore
zRangeByScore
zRangeByScore
zRangeByScore
zRangeByScoreWithScores
zRangeByScoreWithScores
zRangeByScoreWithScores
exec
execute
exists
exists
expire
expireAt
flushAll
flushDb
geoAdd
geoAdd
geoAdd
geoAdd
geoDist
geoDist
geoHash
geoPos
geoRadius
geoRadius
geoRadiusByMember
geoRadiusByMember
geoRadiusByMember
hScan
hSet
hSetNX
hStrLen
hVals
incr
incrBy
incrBy
info
info
isClosed
isPipelined
isQueueing
isSubscribed
keys
killClient
lastSave
lIndex
lInsert
ping
pSetEx
pSubscribe
pTtl
pTtl
publish
randomKey
rename
renameNX
resetConfigStats
restore
rPop
rPopLPush
rPush
rPushX
sAdd
save
scan
sCard
scriptExists
scriptFlush
sMembers
sMove
sort
sort
sPop
sPop
sRandMember
sRandMember
sRem
sScan
strLen
subscribe
sUnion
sUnionStore
time
touch
ttl
ttl
type
unlink
unwatch
zRangeByS
zRangeWit
zRank
zRem
zRemRange
zRemRange
zRemRange
zRevRange
zRevRange
zRevRange
zRevRange
zRevRange
zRevRange
zRevRange
zRevRange
zRevRange
zRevRange
zRevRank
zScan
zScore
zUnionSto
geoCommands
hashCommands
hyperLogLogCommands
keyCommands
listCommands
serverCommands
scriptingCommands
setCommands stringCommands
zSetComma
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/
Split up RedisConnection
35
connection.stringCommands().append
bitCount
bitCount
bitOp
decr
decrBy
get
getBit
getRange
getSet …
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 Connection & Template API
36
Mono<Boolean> mono = redisConnection.stringCommands().set(key, value);
Flux<ByteBuffer> flux = redisConnection.listCommands().lRange(key, 0, 10);
ATTENTION
more in next

session
Apache Cassandra
Neo4j
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/
Load Time
39
0
2
4
6
8
4.x 5.x native
Depth 1 Depth 2
Sneak Peek
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/
Distinct Queries
41
List<String> lastnames = template.query(Person.class)
.distinct("lastname")
.as(String.class)
.matching(query(where("firstname").like("luke")))
.all()
< / >
code
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/
Write to Master read from Slave
42
LettuceTestClientConfiguration.builder()
.readFrom(ReadFrom.SLAVE_PREFERRED)
.build();
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 Pub/Sub
43
ReactiveRedisMessageListenerContainer container = new
ReactiveRedisMessageListenerContainer(connectionFactory);
Flux<Message> messages = container.receive(ChannelTopic.of("s1p")));
// …
container.destroy();
ATTENTION
more in next

session
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 JDBC
44
jdbc
@EnableJdbcRepositories
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
< / >
code
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/
Gemfire Test
45
@ClientCacheApplication
@EnableGemFireMockObjects
class TestConfiguration {
...
}
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/
High Level Client for Elasticsearch 6
46
Mohsin Husen
Artur Konczak
Nikita Klimov
Julien Roy
Alexander Belyaev
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/
Async & Reactive Neo
47
Learn More. Stay Connected.
Tue, 3:20 pm - Reactive Data Access with Spring Data
Tue, 4:20 pm - Under the Hood of Reactive Data Access
Wed, 5:40 pm - Simplifying Apache Geode with Spring Data
Thu, 10:30 am - JDBC, What Is It Good For?
48
#springone@s1p
Disclaimer
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.
50
Ad

More Related Content

What's hot (10)

Spring Framework 5.0: Hidden Gems
Spring Framework 5.0: Hidden GemsSpring Framework 5.0: Hidden Gems
Spring Framework 5.0: Hidden Gems
VMware Tanzu
 
Startup eng-camp 3
Startup eng-camp 3Startup eng-camp 3
Startup eng-camp 3
Jollen Chen
 
Progressive Deployment & NoDeploy
Progressive Deployment & NoDeployProgressive Deployment & NoDeploy
Progressive Deployment & NoDeploy
Yi-Feng Tzeng
 
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(2)
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(2)課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(2)
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(2)
Jollen Chen
 
Accelerating Development with Organizational Opinions
Accelerating Development with Organizational OpinionsAccelerating Development with Organizational Opinions
Accelerating Development with Organizational Opinions
VMware Tanzu
 
Dev(Sec)Ops - Architecture for Security and Compliance
Dev(Sec)Ops - Architecture for Security and ComplianceDev(Sec)Ops - Architecture for Security and Compliance
Dev(Sec)Ops - Architecture for Security and Compliance
Yi-Feng Tzeng
 
What's new in Reactor Californium
What's new in Reactor CaliforniumWhat's new in Reactor Californium
What's new in Reactor Californium
Stéphane Maldini
 
RDBMS and Apache Geode Data Movement: Low Latency ETL Pipeline By Using Cloud...
RDBMS and Apache Geode Data Movement: Low Latency ETL Pipeline By Using Cloud...RDBMS and Apache Geode Data Movement: Low Latency ETL Pipeline By Using Cloud...
RDBMS and Apache Geode Data Movement: Low Latency ETL Pipeline By Using Cloud...
VMware Tanzu
 
Building an HTML5 Video Player
Building an HTML5 Video PlayerBuilding an HTML5 Video Player
Building an HTML5 Video Player
Brightcove
 
Testdrive AngularJS with Spring 4
Testdrive AngularJS with Spring 4Testdrive AngularJS with Spring 4
Testdrive AngularJS with Spring 4
Oliver Wahlen
 
Spring Framework 5.0: Hidden Gems
Spring Framework 5.0: Hidden GemsSpring Framework 5.0: Hidden Gems
Spring Framework 5.0: Hidden Gems
VMware Tanzu
 
Startup eng-camp 3
Startup eng-camp 3Startup eng-camp 3
Startup eng-camp 3
Jollen Chen
 
Progressive Deployment & NoDeploy
Progressive Deployment & NoDeployProgressive Deployment & NoDeploy
Progressive Deployment & NoDeploy
Yi-Feng Tzeng
 
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(2)
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(2)課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(2)
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(2)
Jollen Chen
 
Accelerating Development with Organizational Opinions
Accelerating Development with Organizational OpinionsAccelerating Development with Organizational Opinions
Accelerating Development with Organizational Opinions
VMware Tanzu
 
Dev(Sec)Ops - Architecture for Security and Compliance
Dev(Sec)Ops - Architecture for Security and ComplianceDev(Sec)Ops - Architecture for Security and Compliance
Dev(Sec)Ops - Architecture for Security and Compliance
Yi-Feng Tzeng
 
What's new in Reactor Californium
What's new in Reactor CaliforniumWhat's new in Reactor Californium
What's new in Reactor Californium
Stéphane Maldini
 
RDBMS and Apache Geode Data Movement: Low Latency ETL Pipeline By Using Cloud...
RDBMS and Apache Geode Data Movement: Low Latency ETL Pipeline By Using Cloud...RDBMS and Apache Geode Data Movement: Low Latency ETL Pipeline By Using Cloud...
RDBMS and Apache Geode Data Movement: Low Latency ETL Pipeline By Using Cloud...
VMware Tanzu
 
Building an HTML5 Video Player
Building an HTML5 Video PlayerBuilding an HTML5 Video Player
Building an HTML5 Video Player
Brightcove
 
Testdrive AngularJS with Spring 4
Testdrive AngularJS with Spring 4Testdrive AngularJS with Spring 4
Testdrive AngularJS with Spring 4
Oliver Wahlen
 

Similar to Not Only Reactive - Data Access with Spring Data (20)

Latency analysis for your microservices using Spring Cloud & Zipkin
Latency analysis for your microservices using Spring Cloud & ZipkinLatency analysis for your microservices using Spring Cloud & Zipkin
Latency analysis for your microservices using Spring Cloud & Zipkin
VMware Tanzu
 
Cloud-Native Streaming and Event-Driven Microservices
Cloud-Native Streaming and Event-Driven MicroservicesCloud-Native Streaming and Event-Driven Microservices
Cloud-Native Streaming and Event-Driven Microservices
VMware Tanzu
 
Lessons learned from upgrading Thymeleaf
Lessons learned from upgrading ThymeleafLessons learned from upgrading Thymeleaf
Lessons learned from upgrading Thymeleaf
VMware Tanzu
 
SpringOnePlatform2017 recap
SpringOnePlatform2017 recapSpringOnePlatform2017 recap
SpringOnePlatform2017 recap
minseok kim
 
Tools to Slay the Fire Breathing Monoliths in Your Enterprise
Tools to Slay the Fire Breathing Monoliths in Your EnterpriseTools to Slay the Fire Breathing Monoliths in Your Enterprise
Tools to Slay the Fire Breathing Monoliths in Your Enterprise
VMware Tanzu
 
Enable SQL/JDBC Access to Apache Geode/GemFire Using Apache Calcite
Enable SQL/JDBC Access to Apache Geode/GemFire Using Apache CalciteEnable SQL/JDBC Access to Apache Geode/GemFire Using Apache Calcite
Enable SQL/JDBC Access to Apache Geode/GemFire Using Apache Calcite
Christian Tzolov
 
Designing, Implementing, and Using Reactive APIs
Designing, Implementing, and Using Reactive APIsDesigning, Implementing, and Using Reactive APIs
Designing, Implementing, and Using Reactive APIs
VMware Tanzu
 
Healthy Agile Product Security
Healthy Agile Product SecurityHealthy Agile Product Security
Healthy Agile Product Security
VMware Tanzu
 
Reactor 3.0, a reactive foundation for java 8 and Spring
Reactor 3.0, a reactive foundation for java 8 and SpringReactor 3.0, a reactive foundation for java 8 and Spring
Reactor 3.0, a reactive foundation for java 8 and Spring
Stéphane Maldini
 
Reactive frontends with RxJS and Angular
Reactive frontends with RxJS and AngularReactive frontends with RxJS and Angular
Reactive frontends with RxJS and Angular
VMware Tanzu
 
Groovy 3 and the new Groovy Meta Object Protocol in examples
Groovy 3 and the new Groovy Meta Object Protocol in examplesGroovy 3 and the new Groovy Meta Object Protocol in examples
Groovy 3 and the new Groovy Meta Object Protocol in examples
GR8Conf
 
Teaching TDD to Different Learning Styles
Teaching TDD to Different Learning StylesTeaching TDD to Different Learning Styles
Teaching TDD to Different Learning Styles
VMware Tanzu
 
Fast and Furious: Searching in a Distributed World with Highly Available Spri...
Fast and Furious: Searching in a Distributed World with Highly Available Spri...Fast and Furious: Searching in a Distributed World with Highly Available Spri...
Fast and Furious: Searching in a Distributed World with Highly Available Spri...
VMware Tanzu
 
Enable SQL/JDBC Access to Apache Geode/GemFire Using Apache Calcite
Enable SQL/JDBC Access to Apache Geode/GemFire Using Apache CalciteEnable SQL/JDBC Access to Apache Geode/GemFire Using Apache Calcite
Enable SQL/JDBC Access to Apache Geode/GemFire Using Apache Calcite
VMware Tanzu
 
High performance stream processing
High performance stream processingHigh performance stream processing
High performance stream processing
Glenn Renfro
 
Grooscript in Action SpringOne2gx 2015
Grooscript in Action SpringOne2gx 2015Grooscript in Action SpringOne2gx 2015
Grooscript in Action SpringOne2gx 2015
Jorge Franco Leza
 
Spring 4.3-component-design
Spring 4.3-component-designSpring 4.3-component-design
Spring 4.3-component-design
Grzegorz Duda
 
SpringOne 2GX 2015 - Fullstack Groovy developer
SpringOne 2GX 2015 - Fullstack Groovy developerSpringOne 2GX 2015 - Fullstack Groovy developer
SpringOne 2GX 2015 - Fullstack Groovy developer
Iván López Martín
 
Consumer Driven Contracts and Your Microservice Architecture
Consumer Driven Contracts and Your Microservice ArchitectureConsumer Driven Contracts and Your Microservice Architecture
Consumer Driven Contracts and Your Microservice Architecture
VMware Tanzu
 
Debugging Serverless for Cloud
Debugging Serverless for CloudDebugging Serverless for Cloud
Debugging Serverless for Cloud
VMware Tanzu
 
Latency analysis for your microservices using Spring Cloud & Zipkin
Latency analysis for your microservices using Spring Cloud & ZipkinLatency analysis for your microservices using Spring Cloud & Zipkin
Latency analysis for your microservices using Spring Cloud & Zipkin
VMware Tanzu
 
Cloud-Native Streaming and Event-Driven Microservices
Cloud-Native Streaming and Event-Driven MicroservicesCloud-Native Streaming and Event-Driven Microservices
Cloud-Native Streaming and Event-Driven Microservices
VMware Tanzu
 
Lessons learned from upgrading Thymeleaf
Lessons learned from upgrading ThymeleafLessons learned from upgrading Thymeleaf
Lessons learned from upgrading Thymeleaf
VMware Tanzu
 
SpringOnePlatform2017 recap
SpringOnePlatform2017 recapSpringOnePlatform2017 recap
SpringOnePlatform2017 recap
minseok kim
 
Tools to Slay the Fire Breathing Monoliths in Your Enterprise
Tools to Slay the Fire Breathing Monoliths in Your EnterpriseTools to Slay the Fire Breathing Monoliths in Your Enterprise
Tools to Slay the Fire Breathing Monoliths in Your Enterprise
VMware Tanzu
 
Enable SQL/JDBC Access to Apache Geode/GemFire Using Apache Calcite
Enable SQL/JDBC Access to Apache Geode/GemFire Using Apache CalciteEnable SQL/JDBC Access to Apache Geode/GemFire Using Apache Calcite
Enable SQL/JDBC Access to Apache Geode/GemFire Using Apache Calcite
Christian Tzolov
 
Designing, Implementing, and Using Reactive APIs
Designing, Implementing, and Using Reactive APIsDesigning, Implementing, and Using Reactive APIs
Designing, Implementing, and Using Reactive APIs
VMware Tanzu
 
Healthy Agile Product Security
Healthy Agile Product SecurityHealthy Agile Product Security
Healthy Agile Product Security
VMware Tanzu
 
Reactor 3.0, a reactive foundation for java 8 and Spring
Reactor 3.0, a reactive foundation for java 8 and SpringReactor 3.0, a reactive foundation for java 8 and Spring
Reactor 3.0, a reactive foundation for java 8 and Spring
Stéphane Maldini
 
Reactive frontends with RxJS and Angular
Reactive frontends with RxJS and AngularReactive frontends with RxJS and Angular
Reactive frontends with RxJS and Angular
VMware Tanzu
 
Groovy 3 and the new Groovy Meta Object Protocol in examples
Groovy 3 and the new Groovy Meta Object Protocol in examplesGroovy 3 and the new Groovy Meta Object Protocol in examples
Groovy 3 and the new Groovy Meta Object Protocol in examples
GR8Conf
 
Teaching TDD to Different Learning Styles
Teaching TDD to Different Learning StylesTeaching TDD to Different Learning Styles
Teaching TDD to Different Learning Styles
VMware Tanzu
 
Fast and Furious: Searching in a Distributed World with Highly Available Spri...
Fast and Furious: Searching in a Distributed World with Highly Available Spri...Fast and Furious: Searching in a Distributed World with Highly Available Spri...
Fast and Furious: Searching in a Distributed World with Highly Available Spri...
VMware Tanzu
 
Enable SQL/JDBC Access to Apache Geode/GemFire Using Apache Calcite
Enable SQL/JDBC Access to Apache Geode/GemFire Using Apache CalciteEnable SQL/JDBC Access to Apache Geode/GemFire Using Apache Calcite
Enable SQL/JDBC Access to Apache Geode/GemFire Using Apache Calcite
VMware Tanzu
 
High performance stream processing
High performance stream processingHigh performance stream processing
High performance stream processing
Glenn Renfro
 
Grooscript in Action SpringOne2gx 2015
Grooscript in Action SpringOne2gx 2015Grooscript in Action SpringOne2gx 2015
Grooscript in Action SpringOne2gx 2015
Jorge Franco Leza
 
Spring 4.3-component-design
Spring 4.3-component-designSpring 4.3-component-design
Spring 4.3-component-design
Grzegorz Duda
 
SpringOne 2GX 2015 - Fullstack Groovy developer
SpringOne 2GX 2015 - Fullstack Groovy developerSpringOne 2GX 2015 - Fullstack Groovy developer
SpringOne 2GX 2015 - Fullstack Groovy developer
Iván López Martín
 
Consumer Driven Contracts and Your Microservice Architecture
Consumer Driven Contracts and Your Microservice ArchitectureConsumer Driven Contracts and Your Microservice Architecture
Consumer Driven Contracts and Your Microservice Architecture
VMware Tanzu
 
Debugging Serverless for Cloud
Debugging Serverless for CloudDebugging Serverless for Cloud
Debugging Serverless for Cloud
VMware Tanzu
 
Ad

More from VMware Tanzu (20)

Spring into AI presented by Dan Vega 5/14
Spring into AI presented by Dan Vega 5/14Spring into AI presented by Dan Vega 5/14
Spring into AI presented by Dan Vega 5/14
VMware Tanzu
 
What AI Means For Your Product Strategy And What To Do About It
What AI Means For Your Product Strategy And What To Do About ItWhat AI Means For Your Product Strategy And What To Do About It
What AI Means For Your Product Strategy And What To Do About It
VMware Tanzu
 
Make the Right Thing the Obvious Thing at Cardinal Health 2023
Make the Right Thing the Obvious Thing at Cardinal Health 2023Make the Right Thing the Obvious Thing at Cardinal Health 2023
Make the Right Thing the Obvious Thing at Cardinal Health 2023
VMware Tanzu
 
Enhancing DevEx and Simplifying Operations at Scale
Enhancing DevEx and Simplifying Operations at ScaleEnhancing DevEx and Simplifying Operations at Scale
Enhancing DevEx and Simplifying Operations at Scale
VMware Tanzu
 
Spring Update | July 2023
Spring Update | July 2023Spring Update | July 2023
Spring Update | July 2023
VMware Tanzu
 
Platforms, Platform Engineering, & Platform as a Product
Platforms, Platform Engineering, & Platform as a ProductPlatforms, Platform Engineering, & Platform as a Product
Platforms, Platform Engineering, & Platform as a Product
VMware Tanzu
 
Building Cloud Ready Apps
Building Cloud Ready AppsBuilding Cloud Ready Apps
Building Cloud Ready Apps
VMware Tanzu
 
Spring Boot 3 And Beyond
Spring Boot 3 And BeyondSpring Boot 3 And Beyond
Spring Boot 3 And Beyond
VMware Tanzu
 
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdfSpring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
VMware Tanzu
 
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
VMware Tanzu
 
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
VMware Tanzu
 
tanzu_developer_connect.pptx
tanzu_developer_connect.pptxtanzu_developer_connect.pptx
tanzu_developer_connect.pptx
VMware Tanzu
 
Tanzu Virtual Developer Connect Workshop - French
Tanzu Virtual Developer Connect Workshop - FrenchTanzu Virtual Developer Connect Workshop - French
Tanzu Virtual Developer Connect Workshop - French
VMware Tanzu
 
Tanzu Developer Connect Workshop - English
Tanzu Developer Connect Workshop - EnglishTanzu Developer Connect Workshop - English
Tanzu Developer Connect Workshop - English
VMware Tanzu
 
Virtual Developer Connect Workshop - English
Virtual Developer Connect Workshop - EnglishVirtual Developer Connect Workshop - English
Virtual Developer Connect Workshop - English
VMware Tanzu
 
Tanzu Developer Connect - French
Tanzu Developer Connect - FrenchTanzu Developer Connect - French
Tanzu Developer Connect - French
VMware Tanzu
 
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
VMware Tanzu
 
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring BootSpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
VMware Tanzu
 
SpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software EngineerSpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software Engineer
VMware Tanzu
 
SpringOne Tour: Domain-Driven Design: Theory vs Practice
SpringOne Tour: Domain-Driven Design: Theory vs PracticeSpringOne Tour: Domain-Driven Design: Theory vs Practice
SpringOne Tour: Domain-Driven Design: Theory vs Practice
VMware Tanzu
 
Spring into AI presented by Dan Vega 5/14
Spring into AI presented by Dan Vega 5/14Spring into AI presented by Dan Vega 5/14
Spring into AI presented by Dan Vega 5/14
VMware Tanzu
 
What AI Means For Your Product Strategy And What To Do About It
What AI Means For Your Product Strategy And What To Do About ItWhat AI Means For Your Product Strategy And What To Do About It
What AI Means For Your Product Strategy And What To Do About It
VMware Tanzu
 
Make the Right Thing the Obvious Thing at Cardinal Health 2023
Make the Right Thing the Obvious Thing at Cardinal Health 2023Make the Right Thing the Obvious Thing at Cardinal Health 2023
Make the Right Thing the Obvious Thing at Cardinal Health 2023
VMware Tanzu
 
Enhancing DevEx and Simplifying Operations at Scale
Enhancing DevEx and Simplifying Operations at ScaleEnhancing DevEx and Simplifying Operations at Scale
Enhancing DevEx and Simplifying Operations at Scale
VMware Tanzu
 
Spring Update | July 2023
Spring Update | July 2023Spring Update | July 2023
Spring Update | July 2023
VMware Tanzu
 
Platforms, Platform Engineering, & Platform as a Product
Platforms, Platform Engineering, & Platform as a ProductPlatforms, Platform Engineering, & Platform as a Product
Platforms, Platform Engineering, & Platform as a Product
VMware Tanzu
 
Building Cloud Ready Apps
Building Cloud Ready AppsBuilding Cloud Ready Apps
Building Cloud Ready Apps
VMware Tanzu
 
Spring Boot 3 And Beyond
Spring Boot 3 And BeyondSpring Boot 3 And Beyond
Spring Boot 3 And Beyond
VMware Tanzu
 
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdfSpring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
VMware Tanzu
 
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
VMware Tanzu
 
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
VMware Tanzu
 
tanzu_developer_connect.pptx
tanzu_developer_connect.pptxtanzu_developer_connect.pptx
tanzu_developer_connect.pptx
VMware Tanzu
 
Tanzu Virtual Developer Connect Workshop - French
Tanzu Virtual Developer Connect Workshop - FrenchTanzu Virtual Developer Connect Workshop - French
Tanzu Virtual Developer Connect Workshop - French
VMware Tanzu
 
Tanzu Developer Connect Workshop - English
Tanzu Developer Connect Workshop - EnglishTanzu Developer Connect Workshop - English
Tanzu Developer Connect Workshop - English
VMware Tanzu
 
Virtual Developer Connect Workshop - English
Virtual Developer Connect Workshop - EnglishVirtual Developer Connect Workshop - English
Virtual Developer Connect Workshop - English
VMware Tanzu
 
Tanzu Developer Connect - French
Tanzu Developer Connect - FrenchTanzu Developer Connect - French
Tanzu Developer Connect - French
VMware Tanzu
 
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
VMware Tanzu
 
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring BootSpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
VMware Tanzu
 
SpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software EngineerSpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software Engineer
VMware Tanzu
 
SpringOne Tour: Domain-Driven Design: Theory vs Practice
SpringOne Tour: Domain-Driven Design: Theory vs PracticeSpringOne Tour: Domain-Driven Design: Theory vs Practice
SpringOne Tour: Domain-Driven Design: Theory vs Practice
VMware Tanzu
 
Ad

Recently uploaded (20)

MINDCTI revenue release Quarter 1 2025 PR
MINDCTI revenue release Quarter 1 2025 PRMINDCTI revenue release Quarter 1 2025 PR
MINDCTI revenue release Quarter 1 2025 PR
MIND CTI
 
tecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdftecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdf
fjgm517
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
BookNet Canada
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
TrsLabs Consultants - DeFi, WEb3, Token Listing
TrsLabs Consultants - DeFi, WEb3, Token ListingTrsLabs Consultants - DeFi, WEb3, Token Listing
TrsLabs Consultants - DeFi, WEb3, Token Listing
Trs Labs
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Aqusag Technologies
 
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
Alan Dix
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Are Cloud PBX Providers in India Reliable for Small Businesses (1).pdf
Are Cloud PBX Providers in India Reliable for Small Businesses (1).pdfAre Cloud PBX Providers in India Reliable for Small Businesses (1).pdf
Are Cloud PBX Providers in India Reliable for Small Businesses (1).pdf
Telecoms Supermarket
 
MINDCTI revenue release Quarter 1 2025 PR
MINDCTI revenue release Quarter 1 2025 PRMINDCTI revenue release Quarter 1 2025 PR
MINDCTI revenue release Quarter 1 2025 PR
MIND CTI
 
tecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdftecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdf
fjgm517
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
BookNet Canada
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
TrsLabs Consultants - DeFi, WEb3, Token Listing
TrsLabs Consultants - DeFi, WEb3, Token ListingTrsLabs Consultants - DeFi, WEb3, Token Listing
TrsLabs Consultants - DeFi, WEb3, Token Listing
Trs Labs
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Aqusag Technologies
 
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
Alan Dix
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Are Cloud PBX Providers in India Reliable for Small Businesses (1).pdf
Are Cloud PBX Providers in India Reliable for Small Businesses (1).pdfAre Cloud PBX Providers in India Reliable for Small Businesses (1).pdf
Are Cloud PBX Providers in India Reliable for Small Businesses (1).pdf
Telecoms Supermarket
 

Not Only Reactive - Data Access with Spring Data

  • 1. Not Only Reactive Data Access
 with Spring Data Christoph Strobl John Blum 1 @stroblchristoph @john_blum
  • 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/ 15 Modules. over 700 issues fixed. Let’s move… 3
  • 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/ java.lang.Serializable 5 public interface CrudRepository<T, ID extends Serializable> … {
 T findOne(ID id); … }
  • 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/ java.lang.Serializable 6 public interface CrudRepository<T, ID> extends Repository<T, ID>{
 T findOne(ID id); … }
  • 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/ java.util.Optional 7 public interface CrudRepository<T, ID> extends Repository<T, ID>{
 T findOne(ID id); … }
  • 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/ java.util.Optional 8 public interface CrudRepository<T, ID> extends Repository<T, ID>{
 Optional<T> findOne(ID id); … }
  • 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/ Naming 9 public interface CrudRepository<T, ID> extends Repository<T, ID>{
 Optional<T> findOne(ID id); Iterable<T> findAll(Iterable<ID> ids); Iterable<S> save(Iterable<S> entities); void delete(ID id); … }
  • 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/ Naming 10 public interface CrudRepository<T, ID> extends Repository<T, ID>{
 Optional<T> findById(ID id); Iterable<T> findAllById(Iterable<ID> ids); Iterable<S> saveAll(Iterable<S> entities); void deleteById(ID id); … }
  • 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/ Composable Interfaces 11 interface Repo extends Repository<T, ID>, Custom { … } interface Custom { … } class RepoImpl implements Custom { … }
  • 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/ Composable Interfaces 12 interface Repo extends Repository<T, ID>, Custom { … } interface Custom { … } class CustomImpl implements Custom { … }
  • 13. 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/ Composable Interfaces 13 interface Repo extends Repository<T, ID>, Custom, Mixin { … } interface Custom { … } class CustomImpl implements Custom { … }
  • 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/ @Nullable, @NonNull & @NonNullApi 14 public interface Specification<T> { //… @Nullable Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, …) }
  • 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/ @Nullable, @NonNull & @NonNullApi 15 public interface Repo extends Repository<T, ID> { @NonNull T findByFirstname(String firstname); } < / > code
  • 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/ Kotlin Extensions (specific projects only) 16 var template: MongoTemplate template.updateFirst(query, update, Domaintype::class) val users = template.findAll<DomainType>()
  • 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/ SpEL Enhancements for Projections 17 public interface MyProjection { @Value("#{@bean.method(target, args[0])}") String invokeBeanWithParameter(Integer parameter); } < / > code
  • 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/ …and more new return type: org.springframework.data.util.Streamable Automatic Modules names Support for Vavr … 18
  • 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/ Builder Style Template API 21 template.find(query(where("name").is("luke"), Person.class, "star-wars", Jedi.class);
  • 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/ Builder Style Template API 22 template.query(Person.class) .inCollection("star-wars") .as(Jedi.class) .matching(query(where("name").is("luke")) .all(); < / > code
  • 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/ Untyped Query By Example 23 Person probe = new Person("luke"); operations.query(Person.class) .matching(query(byExample(of(probe, ExampleMatcher.matching())))) .all(); { "first_name" : "luke", "_class" : { "$in" : ["Person"] } }
  • 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/ Untyped Query By Example 24 Person probe = new Person("luke"); operations.query(Person.class) .matching(query(byExample(of(probe, ExampleMatcher.matching() .withIgnorePaths("_class"))))) .all(); { "first_name" : "luke" }
  • 25. 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/ Untyped Query By Example 25 Person probe = new Person("luke"); operations.query(Person.class) .matching(query(byExample(of(probe, UntypedExampleMatcher.matching())))) .all(); { "first_name" : "luke" }
  • 26. 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/ ReactiveMongoOperations 26 <T> List<T> findAll(Class<T> entityClass, String collectionName); <T> T findOne(Query query, Class<T> entityClass); …
  • 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/ ReactiveMongoOperations 27 <T> Flux<T> findAll(Class<T> entityClass, String collectionName); <T> Mono<T> findOne(Query query, Class<T> entityClass); … < / > code < / > code
  • 28. 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/ Infinite Streams 28 Flux<Document> inf = template.tail(query, Document.class, "collection"); Disposable disposable = inf.doOnNext(…).subscribe(); // … disposable.dispose(); ATTENTION more in next
 session
  • 29. 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/ …and more MongoDB 3.6 support Aggregation Enhancements Collation support … 29
  • 30. Redis
  • 31. 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/ Redis Cache 31 public CacheManager cacheManager(RedisTemplate template) { RedisCacheManager cacheManager = new RedisCacheManager(template); cacheManager.setDefaultExpiration(10L); return cacheManager; } public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate template = new RedisTemplate(); template.setConnectionFactory(connectionFactory); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return template; } public RedisConnectionFactory connectionFactory() …
  • 32. 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/ Redis Cache 32 public CacheManager cacheManager(RedisConnectionFactory connectionFactory) { RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofSeconds(10)) .serializeValuesWith(fromSerializer(json())); return RedisCacheManager.builder(connectionFactory) .cacheDefaults(configuration) .withInitialCacheConfigurations(singletonMap("person", 
 RedisCacheConfiguration.defaultCacheConfig())) .build(); } public RedisConnectionFactory connectionFactory() …
  • 33. 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/ Split up RedisConnection 33 append bgReWriteAof bgSave bgWriteAof bitCount bitCount bitOp bLPop bRPop bRPopLPush close closePipeline dbSize decr decrBy del discard dump echo eval evalSha evalSha geoRemove get getBit getClientList getClientName getConfig getNativeConnection getRange getSentinelConnection getSet getSubscription hashCommands hDel hExists hGet hGetAll hIncrBy hIncrBy hKeys hLen hMGet hMSet lLen lPop lPush lPushX lRange lRem lSet lTrim mGet migrate migrate move mSet mSetNX multi openPipeline persist pExpire pExpireAt pfAdd pfCount pfMerge scriptKill scriptLoad sDiff sDiffStore select serverCommands set set setBit setClientName setCommands setConfig setEx setNX setRange shutdown shutdown sInter sInterStore sIsMember slaveOf slaveOfNoOne watch zAdd zAdd zCard zCount zCount zIncrBy zInterStore zInterStore zRange zRangeByLex zRangeByLex zRangeByLex zRangeByScore zRangeByScore zRangeByScore zRangeByScore zRangeByScore zRangeByScore zRangeByScoreWithScores zRangeByScoreWithScores zRangeByScoreWithScores exec execute exists exists expire expireAt flushAll flushDb geoAdd geoAdd geoAdd geoAdd geoCommands geoDist geoDist geoHash geoPos geoRadius geoRadius geoRadiusByMember geoRadiusByMember geoRadiusByMember hScan hSet hSetNX hStrLen hVals hyperLogLogCommands incr incrBy incrBy info info isClosed isPipelined isQueueing isSubscribed keyCommands keys killClient lastSave lIndex lInsert listCommands ping pSetEx pSubscribe pTtl pTtl publish randomKey rename renameNX resetConfigStats restore rPop rPopLPush rPush rPushX sAdd save scan sCard scriptExists scriptFlush scriptingCommands sMembers sMove sort sort sPop sPop sRandMember sRandMember sRem sScan stringCommands strLen subscribe sUnion sUnionStore time touch ttl ttl type unlink unwatch zRangeByS zRangeWit zRank zRem zRemRange zRemRange zRemRange zRevRange zRevRange zRevRange zRevRange zRevRange zRevRange zRevRange zRevRange zRevRange zRevRange zRevRank zScan zScore zSetComma zUnionSto
  • 34. 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/ Split up RedisConnection 34 append bgReWriteAof bgSave bgWriteAof bitCount bitCount bitOp bLPop bRPop bRPopLPush close closePipeline dbSize decr decrBy del discard dump echo eval evalSha evalSha geoRemove get getBit getClientList getClientName getConfig getNativeConnection getRange getSentinelConnection getSet getSubscription hDel hExists hGet hGetAll hIncrBy hIncrBy hKeys hLen hMGet hMSet lLen lPop lPush lPushX lRange lRem lSet lTrim mGet migrate migrate move mSet mSetNX multi openPipeline persist pExpire pExpireAt pfAdd pfCount pfMerge scriptKill scriptLoad sDiff sDiffStore select set set setBit setClientName setConfig setEx setNX setRange shutdown shutdown sInter sInterStore sIsMember slaveOf slaveOfNoOne watch zAdd zAdd zCard zCount zCount zIncrBy zInterStore zInterStore zRange zRangeByLex zRangeByLex zRangeByLex zRangeByScore zRangeByScore zRangeByScore zRangeByScore zRangeByScore zRangeByScore zRangeByScoreWithScores zRangeByScoreWithScores zRangeByScoreWithScores exec execute exists exists expire expireAt flushAll flushDb geoAdd geoAdd geoAdd geoAdd geoDist geoDist geoHash geoPos geoRadius geoRadius geoRadiusByMember geoRadiusByMember geoRadiusByMember hScan hSet hSetNX hStrLen hVals incr incrBy incrBy info info isClosed isPipelined isQueueing isSubscribed keys killClient lastSave lIndex lInsert ping pSetEx pSubscribe pTtl pTtl publish randomKey rename renameNX resetConfigStats restore rPop rPopLPush rPush rPushX sAdd save scan sCard scriptExists scriptFlush sMembers sMove sort sort sPop sPop sRandMember sRandMember sRem sScan strLen subscribe sUnion sUnionStore time touch ttl ttl type unlink unwatch zRangeByS zRangeWit zRank zRem zRemRange zRemRange zRemRange zRevRange zRevRange zRevRange zRevRange zRevRange zRevRange zRevRange zRevRange zRevRange zRevRange zRevRank zScan zScore zUnionSto geoCommands hashCommands hyperLogLogCommands keyCommands listCommands serverCommands scriptingCommands setCommands stringCommands zSetComma
  • 35. 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/ Split up RedisConnection 35 connection.stringCommands().append bitCount bitCount bitOp decr decrBy get getBit getRange getSet …
  • 36. 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 Connection & Template API 36 Mono<Boolean> mono = redisConnection.stringCommands().set(key, value); Flux<ByteBuffer> flux = redisConnection.listCommands().lRange(key, 0, 10); ATTENTION more in next
 session
  • 38. Neo4j
  • 39. 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/ Load Time 39 0 2 4 6 8 4.x 5.x native Depth 1 Depth 2
  • 41. 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/ Distinct Queries 41 List<String> lastnames = template.query(Person.class) .distinct("lastname") .as(String.class) .matching(query(where("firstname").like("luke"))) .all() < / > code
  • 42. 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/ Write to Master read from Slave 42 LettuceTestClientConfiguration.builder() .readFrom(ReadFrom.SLAVE_PREFERRED) .build();
  • 43. 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 Pub/Sub 43 ReactiveRedisMessageListenerContainer container = new ReactiveRedisMessageListenerContainer(connectionFactory); Flux<Message> messages = container.receive(ChannelTopic.of("s1p"))); // … container.destroy(); ATTENTION more in next
 session
  • 44. 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 JDBC 44 jdbc @EnableJdbcRepositories public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } } < / > code
  • 45. 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/ Gemfire Test 45 @ClientCacheApplication @EnableGemFireMockObjects class TestConfiguration { ... }
  • 46. 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/ High Level Client for Elasticsearch 6 46 Mohsin Husen Artur Konczak Nikita Klimov Julien Roy Alexander Belyaev
  • 47. 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/ Async & Reactive Neo 47
  • 48. Learn More. Stay Connected. Tue, 3:20 pm - Reactive Data Access with Spring Data Tue, 4:20 pm - Under the Hood of Reactive Data Access Wed, 5:40 pm - Simplifying Apache Geode with Spring Data Thu, 10:30 am - JDBC, What Is It Good For? 48 #springone@s1p
  • 50. 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. 50