SlideShare uma empresa Scribd logo
1 de 50
Baixar para ler offline
Not Only Reactive Data Access

with Spring Data
Christoph Strobl
John Blum
1
@stroblchristoph
@john_blum
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

Mais conteúdo relacionado

Mais procurados

Spring Framework 5.0: Hidden Gems
Spring Framework 5.0: Hidden GemsSpring Framework 5.0: Hidden Gems
Spring Framework 5.0: Hidden GemsVMware Tanzu
 
Startup eng-camp 3
Startup eng-camp 3Startup eng-camp 3
Startup eng-camp 3Jollen Chen
 
Progressive Deployment & NoDeploy
Progressive Deployment & NoDeployProgressive Deployment & NoDeploy
Progressive Deployment & NoDeployYi-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 OpinionsVMware 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 ComplianceYi-Feng Tzeng
 
What's new in Reactor Californium
What's new in Reactor CaliforniumWhat's new in Reactor Californium
What's new in Reactor CaliforniumSté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 PlayerBrightcove
 
Testdrive AngularJS with Spring 4
Testdrive AngularJS with Spring 4Testdrive AngularJS with Spring 4
Testdrive AngularJS with Spring 4Oliver Wahlen
 

Mais procurados (10)

Spring Framework 5.0: Hidden Gems
Spring Framework 5.0: Hidden GemsSpring Framework 5.0: Hidden Gems
Spring Framework 5.0: Hidden Gems
 
Startup eng-camp 3
Startup eng-camp 3Startup eng-camp 3
Startup eng-camp 3
 
Progressive Deployment & NoDeploy
Progressive Deployment & NoDeployProgressive Deployment & NoDeploy
Progressive Deployment & NoDeploy
 
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(2)
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(2)課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(2)
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(2)
 
Accelerating Development with Organizational Opinions
Accelerating Development with Organizational OpinionsAccelerating Development with Organizational Opinions
Accelerating Development with Organizational Opinions
 
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
 
What's new in Reactor Californium
What's new in Reactor CaliforniumWhat's new in Reactor Californium
What's new in Reactor Californium
 
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...
 
Building an HTML5 Video Player
Building an HTML5 Video PlayerBuilding an HTML5 Video Player
Building an HTML5 Video Player
 
Testdrive AngularJS with Spring 4
Testdrive AngularJS with Spring 4Testdrive AngularJS with Spring 4
Testdrive AngularJS with Spring 4
 

Semelhante a Not Only Reactive - Data Access with Spring Data

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 & ZipkinVMware 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 MicroservicesVMware Tanzu
 
Lessons learned from upgrading Thymeleaf
Lessons learned from upgrading ThymeleafLessons learned from upgrading Thymeleaf
Lessons learned from upgrading ThymeleafVMware Tanzu
 
SpringOnePlatform2017 recap
SpringOnePlatform2017 recapSpringOnePlatform2017 recap
SpringOnePlatform2017 recapminseok 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 EnterpriseVMware 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 CalciteChristian Tzolov
 
Designing, Implementing, and Using Reactive APIs
Designing, Implementing, and Using Reactive APIsDesigning, Implementing, and Using Reactive APIs
Designing, Implementing, and Using Reactive APIsVMware Tanzu
 
Healthy Agile Product Security
Healthy Agile Product SecurityHealthy Agile Product Security
Healthy Agile Product SecurityVMware 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 SpringStéphane Maldini
 
Reactive frontends with RxJS and Angular
Reactive frontends with RxJS and AngularReactive frontends with RxJS and Angular
Reactive frontends with RxJS and AngularVMware 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 examplesGR8Conf
 
Teaching TDD to Different Learning Styles
Teaching TDD to Different Learning StylesTeaching TDD to Different Learning Styles
Teaching TDD to Different Learning StylesVMware 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 CalciteVMware Tanzu
 
High performance stream processing
High performance stream processingHigh performance stream processing
High performance stream processingGlenn Renfro
 
Grooscript in Action SpringOne2gx 2015
Grooscript in Action SpringOne2gx 2015Grooscript in Action SpringOne2gx 2015
Grooscript in Action SpringOne2gx 2015Jorge Franco Leza
 
Spring 4.3-component-design
Spring 4.3-component-designSpring 4.3-component-design
Spring 4.3-component-designGrzegorz Duda
 
SpringOne 2GX 2015 - Fullstack Groovy developer
SpringOne 2GX 2015 - Fullstack Groovy developerSpringOne 2GX 2015 - Fullstack Groovy developer
SpringOne 2GX 2015 - Fullstack Groovy developerIvá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 ArchitectureVMware Tanzu
 
Debugging Serverless for Cloud
Debugging Serverless for CloudDebugging Serverless for Cloud
Debugging Serverless for CloudVMware Tanzu
 

Semelhante a 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
 
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
 
Lessons learned from upgrading Thymeleaf
Lessons learned from upgrading ThymeleafLessons learned from upgrading Thymeleaf
Lessons learned from upgrading Thymeleaf
 
SpringOnePlatform2017 recap
SpringOnePlatform2017 recapSpringOnePlatform2017 recap
SpringOnePlatform2017 recap
 
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
 
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
 
Designing, Implementing, and Using Reactive APIs
Designing, Implementing, and Using Reactive APIsDesigning, Implementing, and Using Reactive APIs
Designing, Implementing, and Using Reactive APIs
 
Healthy Agile Product Security
Healthy Agile Product SecurityHealthy Agile Product Security
Healthy Agile Product Security
 
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
 
Reactive frontends with RxJS and Angular
Reactive frontends with RxJS and AngularReactive frontends with RxJS and Angular
Reactive frontends with RxJS and Angular
 
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
 
Teaching TDD to Different Learning Styles
Teaching TDD to Different Learning StylesTeaching TDD to Different Learning Styles
Teaching TDD to Different Learning Styles
 
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...
 
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
 
High performance stream processing
High performance stream processingHigh performance stream processing
High performance stream processing
 
Grooscript in Action SpringOne2gx 2015
Grooscript in Action SpringOne2gx 2015Grooscript in Action SpringOne2gx 2015
Grooscript in Action SpringOne2gx 2015
 
Spring 4.3-component-design
Spring 4.3-component-designSpring 4.3-component-design
Spring 4.3-component-design
 
SpringOne 2GX 2015 - Fullstack Groovy developer
SpringOne 2GX 2015 - Fullstack Groovy developerSpringOne 2GX 2015 - Fullstack Groovy developer
SpringOne 2GX 2015 - Fullstack Groovy developer
 
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
 
Debugging Serverless for Cloud
Debugging Serverless for CloudDebugging Serverless for Cloud
Debugging Serverless for Cloud
 

Mais de 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 ItVMware 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 2023VMware 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 ScaleVMware Tanzu
 
Spring Update | July 2023
Spring Update | July 2023Spring Update | July 2023
Spring Update | July 2023VMware 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 ProductVMware Tanzu
 
Building Cloud Ready Apps
Building Cloud Ready AppsBuilding Cloud Ready Apps
Building Cloud Ready AppsVMware Tanzu
 
Spring Boot 3 And Beyond
Spring Boot 3 And BeyondSpring Boot 3 And Beyond
Spring Boot 3 And BeyondVMware 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.pdfVMware 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 2023VMware 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 2023VMware Tanzu
 
tanzu_developer_connect.pptx
tanzu_developer_connect.pptxtanzu_developer_connect.pptx
tanzu_developer_connect.pptxVMware Tanzu
 
Tanzu Virtual Developer Connect Workshop - French
Tanzu Virtual Developer Connect Workshop - FrenchTanzu Virtual Developer Connect Workshop - French
Tanzu Virtual Developer Connect Workshop - FrenchVMware Tanzu
 
Tanzu Developer Connect Workshop - English
Tanzu Developer Connect Workshop - EnglishTanzu Developer Connect Workshop - English
Tanzu Developer Connect Workshop - EnglishVMware Tanzu
 
Virtual Developer Connect Workshop - English
Virtual Developer Connect Workshop - EnglishVirtual Developer Connect Workshop - English
Virtual Developer Connect Workshop - EnglishVMware Tanzu
 
Tanzu Developer Connect - French
Tanzu Developer Connect - FrenchTanzu Developer Connect - French
Tanzu Developer Connect - FrenchVMware 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 2023VMware 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 BootVMware Tanzu
 
SpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software EngineerSpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software EngineerVMware 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 PracticeVMware Tanzu
 
SpringOne Tour: Spring Recipes: A Collection of Common-Sense Solutions
SpringOne Tour: Spring Recipes: A Collection of Common-Sense SolutionsSpringOne Tour: Spring Recipes: A Collection of Common-Sense Solutions
SpringOne Tour: Spring Recipes: A Collection of Common-Sense SolutionsVMware Tanzu
 

Mais de VMware Tanzu (20)

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
 
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
 
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
 
Spring Update | July 2023
Spring Update | July 2023Spring Update | July 2023
Spring Update | July 2023
 
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
 
Building Cloud Ready Apps
Building Cloud Ready AppsBuilding Cloud Ready Apps
Building Cloud Ready Apps
 
Spring Boot 3 And Beyond
Spring Boot 3 And BeyondSpring Boot 3 And Beyond
Spring Boot 3 And Beyond
 
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
 
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
 
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
 
tanzu_developer_connect.pptx
tanzu_developer_connect.pptxtanzu_developer_connect.pptx
tanzu_developer_connect.pptx
 
Tanzu Virtual Developer Connect Workshop - French
Tanzu Virtual Developer Connect Workshop - FrenchTanzu Virtual Developer Connect Workshop - French
Tanzu Virtual Developer Connect Workshop - French
 
Tanzu Developer Connect Workshop - English
Tanzu Developer Connect Workshop - EnglishTanzu Developer Connect Workshop - English
Tanzu Developer Connect Workshop - English
 
Virtual Developer Connect Workshop - English
Virtual Developer Connect Workshop - EnglishVirtual Developer Connect Workshop - English
Virtual Developer Connect Workshop - English
 
Tanzu Developer Connect - French
Tanzu Developer Connect - FrenchTanzu Developer Connect - French
Tanzu Developer Connect - French
 
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
 
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
 
SpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software EngineerSpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software Engineer
 
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
 
SpringOne Tour: Spring Recipes: A Collection of Common-Sense Solutions
SpringOne Tour: Spring Recipes: A Collection of Common-Sense SolutionsSpringOne Tour: Spring Recipes: A Collection of Common-Sense Solutions
SpringOne Tour: Spring Recipes: A Collection of Common-Sense Solutions
 

Último

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfOverkill Security
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 

Último (20)

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 

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
  • 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/ 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