Sanil Nambiar
Session APD23 | June 2nd, 2026 Holly Cummins, STSM, Quarkus
The ROI of Quarkus for
Spring Boot Applications
Slide 2
Slide 2 text
Agenda
-What is Quarkus?
-Why Quarkus?
-Can we quantify that?
-The developer experience ROI
-Getting to Quarkus from Spring Boot
Slide 3
Slide 3 text
@holly_cummins #Quarkus
2022
Slide 4
Slide 4 text
@holly_cummins #Quarkus
“I can’t bring up the
microservices in my Java
dev stack
2022
Slide 5
Slide 5 text
@holly_cummins #Quarkus
“I can’t bring up the
microservices in my Java
dev stack
… on my brand new Apple
laptop with a M1 chip and
-
fi
ntech CTO
2022
Slide 6
Slide 6 text
@holly_cummins
most java web
frameworks are
resource-hungry
they hog cpu and ram
Slide 7
Slide 7 text
@holly_cummins
most java web
frameworks are
verbose
there is a lot of typing
Slide 8
Slide 8 text
@holly_cummins #Quarkus
in production, it’s worse
Slide 9
Slide 9 text
@holly_cummins #Quarkus
in production, it’s worse
Slide 10
Slide 10 text
@holly_cummins #Quarkus
in production, it’s worse
example microservices maths:
Slide 11
Slide 11 text
@holly_cummins #Quarkus
in production, it’s worse
example microservices maths:
Lufthansa maintenance scheduling system
Slide 12
Slide 12 text
@holly_cummins #Quarkus
in production, it’s worse
example microservices maths:
Lufthansa maintenance scheduling system
single service: ½ core + 1 GB RAM
Slide 13
Slide 13 text
@holly_cummins #Quarkus
in production, it’s worse
example microservices maths:
Lufthansa maintenance scheduling system
single service: ½ core + 1 GB RAM
HA → 3x instances
Slide 14
Slide 14 text
@holly_cummins #Quarkus
in production, it’s worse
example microservices maths:
Lufthansa maintenance scheduling system
single service: ½ core + 1 GB RAM
HA → 3x instances
~100 microservices
Slide 15
Slide 15 text
@holly_cummins #Quarkus
in production, it’s worse
example microservices maths:
Lufthansa maintenance scheduling system
single service: ½ core + 1 GB RAM
HA → 3x instances
~100 microservices
= 150 cores + 300 GB RAM
Slide 16
Slide 16 text
@holly_cummins #Quarkus
why is this happening?
mismatch between what we need
and what the platform is optimised for
Slide 17
Slide 17 text
enter … quarkus
Slide 18
Slide 18 text
a Java framework that gets you going faster, faster.
enter … quarkus
Slide 19
Slide 19 text
what is quarkus?
Slide 20
Slide 20 text
No content
Slide 21
Slide 21 text
No content
Slide 22
Slide 22 text
hibernate
Slide 23
Slide 23 text
hibernate
rest
Slide 24
Slide 24 text
hibernate
rest
jackson
Slide 25
Slide 25 text
hibernate
rest
jackson
Slide 26
Slide 26 text
hibernate
netty
rest
jackson
Slide 27
Slide 27 text
hibernate
netty
rest
langchain4j
jackson
Slide 28
Slide 28 text
hibernate
netty
rest
langchain4j
jackson
etc
Slide 29
Slide 29 text
hibernate
netty
rest
langchain4j
jackson
etc
Slide 30
Slide 30 text
hibernate
netty
rest
langchain4j
jackson
etc
Slide 31
Slide 31 text
hibernate
netty
rest
langchain4j
jackson
etc
runtime infrastructure
Slide 32
Slide 32 text
hibernate
netty
rest
langchain4j
jackson
etc
runtime infrastructure
build infrastructure
Slide 33
Slide 33 text
hibernate
netty
rest
langchain4j
jackson
etc
runtime infrastructure
build infrastructure
Slide 34
Slide 34 text
hibernate
netty
rest
langchain4j
jackson
etc
runtime infrastructure
build infrastructure
Slide 35
Slide 35 text
hibernate
netty
rest
langchain4j
jackson
etc
runtime infrastructure
build infrastructure
Slide 36
Slide 36 text
hibernate
netty
rest
langchain4j
jackson
etc
runtime infrastructure
build infrastructure
Slide 37
Slide 37 text
hibernate
netty
rest
langchain4j
jackson
etc
runtime infrastructure
build infrastructure
Slide 38
Slide 38 text
hibernate
netty
rest
langchain4j
jackson
etc
runtime infrastructure
build infrastructure
Slide 39
Slide 39 text
hibernate
netty
rest
langchain4j
jackson
etc
runtime infrastructure
build infrastructure
Slide 40
Slide 40 text
hibernate
netty
rest
langchain4j
jackson
etc
runtime infrastructure
build infrastructure
Slide 41
Slide 41 text
netty
etc
runtime infrastructure
build infrastructure
hibernate
rest
langchain4j
jackson
- An integrated collection of your favourite libraries (Hibernate, Jackson, dependency injection, Netty, etc)
- A super-scalable core, build on Eclipse Vert.x
- Minimises unnecessary work at runtime
Slide 42
Slide 42 text
netty
etc
runtime infrastructure
build infrastructure
hibernate
rest
langchain4j
jackson
- An integrated collection of your favourite libraries (Hibernate, Jackson, dependency injection, Netty, etc)
- A super-scalable core, build on Eclipse Vert.x
- Minimises unnecessary work at runtime
Slide 43
Slide 43 text
No content
Slide 44
Slide 44 text
No content
Slide 45
Slide 45 text
e
ffi
ciency
Slide 46
Slide 46 text
e
ffi
ciency
build-time
principle
Slide 47
Slide 47 text
e
ffi
ciency
build-time
principle
reactive core
Slide 48
Slide 48 text
e
ffi
ciency
developer experience
(also e
ffi
ciency)
build-time
principle
reactive core
Slide 49
Slide 49 text
e
ffi
ciency
developer experience
(also e
ffi
ciency)
build-time
principle
reactive core
live reload
Slide 50
Slide 50 text
e
ffi
ciency
developer experience
(also e
ffi
ciency)
build-time
principle
reactive core
live reload
continuous testing
Slide 51
Slide 51 text
e
ffi
ciency
developer experience
(also e
ffi
ciency)
build-time
principle
reactive core
minimising
boilerplate
live reload
continuous testing
Slide 52
Slide 52 text
e
ffi
ciency
developer experience
(also e
ffi
ciency)
build-time
principle
reactive core
minimising
boilerplate
live reload
continuous testing
dev ui
Slide 53
Slide 53 text
e
ffi
ciency
developer experience
(also e
ffi
ciency)
build-time
principle
reactive core
minimising
boilerplate
live reload
continuous testing
dev ui
Slide 54
Slide 54 text
e
ffi
ciency
developer experience
(also e
ffi
ciency)
build-time
principle
reactive core
minimising
boilerplate
live reload
continuous testing
dev ui
Slide 55
Slide 55 text
why is quarkus novel?
Slide 56
Slide 56 text
@holly_cummins
application frameworks were
optimised for dynamism
Slide 57
Slide 57 text
@holly_cummins
application frameworks
optimised for dynamism
dynamism has a cost
Slide 58
Slide 58 text
@holly_cummins
paying a dynamism tax
… even though the app is not dynamic
Slide 59
Slide 59 text
@holly_cummins
a highly dynamic
runtime in a container
is pointless
Slide 60
Slide 60 text
@holly_cummins #RedHat
most apps are
immutable
now
Slide 61
Slide 61 text
@holly_cummins #RedHat
most apps are
immutable
now
Slide 62
Slide 62 text
@holly_cummins #RedHat
most apps are
immutable
now
Slide 63
Slide 63 text
@holly_cummins #RedHat
most apps are
immutable
now
Slide 64
Slide 64 text
@holly_cummins #RedHat
most apps are
immutable
now
Slide 65
Slide 65 text
@holly_cummins #RedHat
most apps are
immutable
now
Slide 66
Slide 66 text
@holly_cummins #Quarkus
how does a java framework start?
Slide 67
Slide 67 text
@holly_cummins #Quarkus
how does a java framework start?
build time
Slide 68
Slide 68 text
@holly_cummins #Quarkus
how does a java framework start?
build time runtime
Slide 69
Slide 69 text
@holly_cummins #Quarkus
how does a java framework start?
build time runtime
Slide 70
Slide 70 text
@holly_cummins #Quarkus
how does a java framework start?
packaging
(maven, gradle…)
build time runtime
Slide 71
Slide 71 text
@holly_cummins #Quarkus
how does a java framework start?
build time runtime
Slide 72
Slide 72 text
@holly_cummins #Quarkus
how does a java framework start?
build time runtime
Slide 73
Slide 73 text
@holly_cummins #Quarkus
how does a java framework start?
build time runtime
load and parse
• config files
• properties
• yaml
• xml
• etc.
Slide 74
Slide 74 text
@holly_cummins #Quarkus
how does a java framework start?
build time runtime
Slide 75
Slide 75 text
@holly_cummins #Quarkus
how does a java framework start?
@
@
build time runtime
• classpath scanning and
annotation discovery
• attempt to load class to
enable/disable features
Slide 76
Slide 76 text
@holly_cummins #Quarkus
how does a java framework start?
@
@
build time runtime
Slide 77
Slide 77 text
@holly_cummins #Quarkus
how does a java framework start?
@
@
build time runtime
build a metamodel
of the world
Slide 78
Slide 78 text
@holly_cummins #Quarkus
how does a java framework start?
@
@
build time runtime
Slide 79
Slide 79 text
@holly_cummins #Quarkus
how does a java framework start?
@
@
build time runtime
start
• thread pools
• I/O
• etc.
Slide 80
Slide 80 text
@holly_cummins #Quarkus
how does a java framework start?
@
@
build time runtime
ready to
do work!
Slide 81
Slide 81 text
@holly_cummins #Quarkus
what if we start the application more than once?
@
@
Slide 82
Slide 82 text
@holly_cummins #Quarkus
what if we start the application more than once?
@
@
@
@
Slide 83
Slide 83 text
@holly_cummins #Quarkus
what if we start the application more than once?
@
@
@
@
@
@
Slide 84
Slide 84 text
@holly_cummins #Quarkus
what if we start the application more than once?
@
@
@
@
@
@
@
@
Slide 85
Slide 85 text
@holly_cummins #Quarkus
what if we start the application more than once?
@
@
@
@
@
@
@
@
Slide 86
Slide 86 text
@holly_cummins #Quarkus
what if we start the application more than once?
@
@
@
@
@
@
@
@
so much work gets
redone every time
@holly_cummins
Hibernate
speed example: JTA auto-wiring
Class.forName(“LikelyJTAImplementation”);
Class.forName(“APossibleJTAImplementation”);
Class.forName(“AnotherJTAImplementation”);
Class.forName(“NicheJTAImplementation”);
Class.forName(“VeryNicheJTAImplementation”);
…
~129
auto-wiring attempts
every single start.
Slide 98
Slide 98 text
@holly_cummins
it’s not just JTA
this happens for lots of internal service bindings
Slide 99
Slide 99 text
@holly_cummins
JVM
footprint example: Hibernate
Slide 100
Slide 100 text
@holly_cummins
JVM spends time
loading classes for
specific databases
JVM
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
footprint example: Hibernate
Slide 101
Slide 101 text
@holly_cummins
JVM spends time
loading classes for
specific databases
JVM
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
turns out they’re
never used
footprint example: Hibernate
Slide 102
Slide 102 text
@holly_cummins
JVM spends time
loading classes for
specific databases
JVM
turns out they’re
never used
JIT spends time
unloading classes
footprint example: Hibernate
Slide 103
Slide 103 text
@holly_cummins
Hibernate
example:
~500 classes
which are only useful if you're running an Oracle database
loaded and then unloaded
Slide 104
Slide 104 text
@holly_cummins
Hibernate
example:
~500 classes
which are only useful if you're running an Oracle database
loaded and then unloaded
every single start.
Slide 105
Slide 105 text
@holly_cummins
the true cost of loaded classes isn’t just memory + start time
Slide 106
Slide 106 text
@holly_cummins
the true cost of loaded classes isn’t just memory + start time
method dispatching:
Slide 107
Slide 107 text
@holly_cummins
interface
the true cost of loaded classes isn’t just memory + start time
method dispatching:
Slide 108
Slide 108 text
@holly_cummins
unused
implementation
the one we
want
interface
unused
implementation
unused
implementation
the true cost of loaded classes isn’t just memory + start time
method dispatching:
Slide 109
Slide 109 text
@holly_cummins
unused
implementation
the one we
want
interface
unused
implementation
unused
implementation
the true cost of loaded classes isn’t just memory + start time
method dispatching:
Slide 110
Slide 110 text
@holly_cummins
unused
implementation
the one we
want
interface
megamorphic call
slow dispatching
unused
implementation
unused
implementation
the true cost of loaded classes isn’t just memory + start time
method dispatching:
Slide 111
Slide 111 text
@holly_cummins
the true cost of loaded classes isn’t just memory + start time
the one we
want
interface
Slide 112
Slide 112 text
@holly_cummins
the true cost of loaded classes isn’t just memory + start time
the one we
want
monomorphic call
fast dispatching
interface
Slide 113
Slide 113 text
@holly_cummins
how do we fix all this?
Slide 114
Slide 114 text
@holly_cummins #Quarkus
@
@
build time runtime
what if we initialize at build time?
Slide 115
Slide 115 text
@holly_cummins #Quarkus
@
@
build time runtime
what if we initialize at build time?
Slide 116
Slide 116 text
@holly_cummins #Quarkus
@
@
build time runtime
start
• thread pools
• I/O
• etc.
what if we initialize at build time?
Slide 117
Slide 117 text
@holly_cummins #Quarkus
@
@
build time runtime
ready to
do work!
start
• thread pools
• I/O
• etc.
what if we initialize at build time?
Slide 118
Slide 118 text
@holly_cummins #Quarkus
@
@
repeated starts are now
efficient
Slide 119
Slide 119 text
@holly_cummins #Quarkus
@
@
repeated starts are now
efficient
Slide 120
Slide 120 text
@holly_cummins #Quarkus
@
@
repeated starts are now
efficient
Slide 121
Slide 121 text
@holly_cummins #Quarkus
@
@
repeated starts are now
efficient
Slide 122
Slide 122 text
@holly_cummins #Quarkus
@
@
repeated starts are now
efficient
Slide 123
Slide 123 text
@holly_cummins #Quarkus
@
@
repeated starts are now
efficient
Slide 124
Slide 124 text
@holly_cummins #Quarkus
@
@
repeated starts are now
efficient
less wasted work
Slide 125
Slide 125 text
@holly_cummins #Quarkus
the Quarkus way enables native compilation
native
(graalvm)
@
@
jvm
build time
Slide 126
Slide 126 text
@holly_cummins #Quarkus
the Quarkus way enables native compilation
native
(graalvm)
@
@
jvm
build time
Slide 127
Slide 127 text
to the code!
native binaries with Quarkus
Slide 128
Slide 128 text
#Quarkus @holly_cummins
2020
Slide 129
Slide 129 text
#Quarkus @holly_cummins
hey, wanna see
quarkus?
hey, wanna see
quarkus?
hey, wanna see
quarkus?
hey, wanna see
quarkus?
hey, wanna see
quarkus?
2020
Slide 130
Slide 130 text
#Quarkus @holly_cummins
hey, wanna see
quarkus?
hey, wanna see
quarkus?
hey, wanna see
quarkus?
hey, wanna see
quarkus?
hey, wanna see
quarkus?
uhh … are you
supposed to shut down
applications after using
them?
2020
Slide 131
Slide 131 text
#Quarkus @holly_cummins
hey, wanna see
quarkus?
hey, wanna see
quarkus?
hey, wanna see
quarkus?
hey, wanna see
quarkus?
hey, wanna see
quarkus?
uhh … are you
supposed to shut down
applications after using
them?
120 instances (!)
2020
Slide 132
Slide 132 text
@holly_cummins
Slide 133
Slide 133 text
@holly_cummins
doing more up-front
Slide 134
Slide 134 text
@holly_cummins
doing more up-front
- speeds up start
Slide 135
Slide 135 text
@holly_cummins
doing more up-front
- speeds up start
- shrinks memory footprint
Slide 136
Slide 136 text
@holly_cummins
doing more up-front
- speeds up start
- shrinks memory footprint
- improves throughput (!)
low load
pack many instances onto a node
memory is the limiting factor
how much hardware does an app need?
high load
horizontally scale to support load
max throughput is the limiting
factor
assumptions: EC2 c6i.xlarge instance, us-east-1, $0.17 per hour
low load scenario: cost per instance per year
Slide 156
Slide 156 text
quarkus
spring
p
r
i
0.17
p
r
i
1489.2
assumptions: EC2 c6i.xlarge instance, us-east-1, $0.17 per hour
low load scenario: cost per instance per year
Slide 157
Slide 157 text
quarkus
spring
p
r
i
0.17
p
r
i
1489.2
jvm
US$64.75
US$135.38
assumptions: EC2 c6i.xlarge instance, us-east-1, $0.17 per hour
low load scenario: cost per instance per year
Slide 158
Slide 158 text
quarkus
spring
p
r
i
0.17
p
r
i
1489.2
jvm
US$64.75
US$135.38
native
US$19.86
US$64.75
assumptions: EC2 c6i.xlarge instance, us-east-1, $0.17 per hour
low load scenario: cost per instance per year
Slide 159
Slide 159 text
quarkus
spring
p
r
i
0.17
p
r
i
1489.2
jvm
US$64.75
US$135.38
native
US$19.86
US$64.75
assumptions: EC2 c6i.xlarge instance, us-east-1, $0.17 per hour
low load scenario: cost per instance per year
2.1x
Slide 160
Slide 160 text
quarkus
spring
p
r
i
0.17
p
r
i
1489.2
jvm
US$64.75
US$135.38
native
US$19.86
US$64.75
assumptions: EC2 c6i.xlarge instance, us-east-1, $0.17 per hour
low load scenario: cost per instance per year
2.1x 3.3x
Slide 161
Slide 161 text
p
r
i
p
r
i
jvm native
quarkus
0.17
1489.2 US$6,475 US$1,986
spring US$13,538 US$6,475
low load scenario: cost per hundred instances per year
assumptions: EC2 c6i.xlarge instance, us-east-1, $0.17 per hour
low load
quarkus native uses ⅓ the
memory of spring native
how much can quarkus save you?
high load
quarkus on jvm can handle 1.7x
more requests than spring boot
Slide 177
Slide 177 text
#Quarkus @holly_cummins
we also see better response times
Slide 178
Slide 178 text
#Quarkus @holly_cummins
users care (a lot)
about response time
we also see better response times
Slide 179
Slide 179 text
can we trust this data?
Slide 180
Slide 180 text
what we see in the
fi
eld matches
what we see in the lab.
https://www.reddit.com/r/SpringBoot/comments/1tj5tsn/comment/on04x23/
2.7x
less memory
Slide 183
Slide 183 text
@holly_cummins #Quarkus
remember the airline scheduling application?
Slide 184
Slide 184 text
@holly_cummins #Quarkus
remember the airline scheduling application?
“[With Quarkus], we can run 3 times denser
deployments without sacrificing availability and
response times of services. ”
– Thorsten Pohl
Slide 185
Slide 185 text
@holly_cummins #Quarkus
remember the airline scheduling application?
“[With Quarkus], we can run 3 times denser
deployments without sacrificing availability and
response times of services. ”
– Thorsten Pohl
3x
less hardware
Slide 186
Slide 186 text
is quarkus greener?
Slide 187
Slide 187 text
@holly_cummins #Quarkus
Slide 188
Slide 188 text
to the code!
energy comparisons
Slide 189
Slide 189 text
@holly_cummins #RedHat
Setup:
• REST + CRUD
• large heap
• RAPL energy measurement
• multiple instances to
support high load
Assumptions:
• US energy mix
Source: John O’Hara
experiment 1: RAPL measurements
Slide 190
Slide 190 text
@holly_cummins #RedHat
Setup:
• REST + CRUD
• large heap
• RAPL energy measurement
• multiple instances to
support high load
Assumptions:
• US energy mix
Source: John O’Hara
experiment 1: RAPL measurements
quarkus on JVM has the lowest carbon …
because it has the highest throughput
Slide 191
Slide 191 text
@holly_cummins #RedHat
Setup:
• REST + CRUD
• large heap
• RAPL energy measurement
• multiple instances to
support high load
Assumptions:
• US energy mix
Source: John O’Hara
experiment 1: RAPL measurements
quarkus on JVM has the lowest carbon …
because it has the highest throughput
~½
the energy
requirements
Slide 192
Slide 192 text
@holly_cummins #RedHat
density
Source: Clement Esco
ff i
er
experiment 2: cloud
Setup:
• 800 requests/second, over 20
days
• SLA > 99%
• AWS instances
Assumptions:
• Costs are for us-east-1 data
centre
Slide 193
Slide 193 text
@holly_cummins #RedHat
interpolated carbon metrics – hardware and electricity
Setup:
• 800 requests/second, over 20 days
• SLA > 99%
Assumptions:
• 50% load
Source: Clement Esco
ffi
er x Teads
cloud carbon impact of framework choice
Slide 194
Slide 194 text
@holly_cummins #RedHat
interpolated carbon metrics – hardware and electricity
Setup:
• 800 requests/second, over 20 days
• SLA > 99%
Assumptions:
• 50% load
Source: Clement Esco
ffi
er x Teads
cloud carbon impact of framework choice
the carbon is lower because
the cost is lower
Slide 195
Slide 195 text
@holly_cummins #RedHat
interpolated carbon metrics – hardware and electricity
Setup:
• 800 requests/second, over 20 days
• SLA > 99%
Assumptions:
• 50% load
Source: Clement Esco
ffi
er x Teads
cloud carbon impact of framework choice
the carbon is lower because
the cost is lower
~½
the carbon
@holly_cummins #Quarkus
mvn quarkus:dev
zero-con
fi
g live coding
Slide 201
Slide 201 text
@holly_cummins #Quarkus
tests are run on every code change
“reverse code coverage” means only relevant tests run
mvn quarkus:dev
continuous testing
Slide 202
Slide 202 text
@holly_cummins #Quarkus
developer UI
Slide 203
Slide 203 text
to the code!
dev mode and continuous testing
Slide 204
Slide 204 text
@holly_cummins #Quarkus
with quarkus, developers
have to type less boilerplate
Slide 205
Slide 205 text
@holly_cummins #Quarkus
with quarkus, developers
have to read less boilerplate
Slide 206
Slide 206 text
@holly_cummins #Quarkus
zero-con
fi
g testcontainers
Slide 207
Slide 207 text
@holly_cummins #Quarkus
testcontainers integration … without quarkus
@TestConfiguration(proxyBeanMethods = false)
public class ContainersConfig {
@Bean
@ServiceConnection
public PostgreSQLContainer postgres() {
return new PostgreSQLContainer<>(DockerImageName.parse("postgres:14"));
}
}
public class TestApplication {
public static void main(String[] args) {
SpringApplication
.from(MySpringDataApplication::main)
.with(ContainersConfig.class)
.run(args);
}
}
@Import(ContainersConfig.class)
Slide 208
Slide 208 text
@holly_cummins #Quarkus
testcontainers integration … without quarkus
Slide 209
Slide 209 text
@holly_cummins #Quarkus
zero-config testcontainers integration
the only thing you need to do to make
testcontainers work is not con
fi
gure anything
# configure your datasource
quarkus.datasource.db-kind = postgresql
quarkus.datasource.username = sarah
quarkus.datasource.password = connor
quarkus.datasource.jdbc.url = jdbc:postgresql://localhost:5432/mydatabase
# drop and create the database at startup
quarkus.hibernate-orm.database.generation = drop-and-create
Slide 210
Slide 210 text
@holly_cummins #Quarkus
zero-config testcontainers integration
the only thing you need to do to make
testcontainers work is not con
fi
gure anything
# drop and create the database at startup
quarkus.hibernate-orm.database.generation = drop-and-create
Slide 211
Slide 211 text
@holly_cummins #Quarkus
zero-config testcontainers integration
the only thing you need to do to make
testcontainers work is not con
fi
gure anything
Slide 212
Slide 212 text
@holly_cummins #Quarkus
zero-config testcontainers integration
the only thing you need to do to make
testcontainers work is not con
fi
gure anything
quarkus also auto-invokes
fl
yway and liquibase
@holly_cummins #Quarkus
example: panache + hibernate
active record pattern
@Entity
public class Greeting extends PanacheEntity {
public String name;
public LocalDate issued;
@Version
public int version;
public static List getTodaysGreetings() {
return list("date", LocalDate.now());
}
}
https://www.reddit.com/r/SpringBoot/comments/1tj5tsn/comment/on04x23/
40%
less code
Slide 221
Slide 221 text
Christos Sotiriou, DXL technical lead at Vodafone Greece
Slide 222
Slide 222 text
2019: Moved digital experience to
quarkus (from Spring Boot)
Christos Sotiriou, DXL technical lead at Vodafone Greece
Slide 223
Slide 223 text
2019: Moved digital experience to
quarkus (from Spring Boot)
• Startup times 40s ➡ 12s
Christos Sotiriou, DXL technical lead at Vodafone Greece
Slide 224
Slide 224 text
2019: Moved digital experience to
quarkus (from Spring Boot)
• Startup times 40s ➡ 12s
• RAM 800 MB ➡ 360 MB
Christos Sotiriou, DXL technical lead at Vodafone Greece
Slide 225
Slide 225 text
2019: Moved digital experience to
quarkus (from Spring Boot)
• Startup times 40s ➡ 12s
• RAM 800 MB ➡ 360 MB
• Developer productivity ⬆ 30-40%–
Christos Sotiriou, DXL technical lead at Vodafone Greece
Slide 226
Slide 226 text
2019: Moved digital experience to
quarkus (from Spring Boot)
• Startup times 40s ➡ 12s
• RAM 800 MB ➡ 360 MB
• Developer productivity ⬆ 30-40%–
30-40%
more productive
Christos Sotiriou, DXL technical lead at Vodafone Greece
@holly_cummins #Quarkus
migration
compatibility libraries
tooling
ai skills
Slide 245
Slide 245 text
to the code!
spring compatibility libraries
Slide 246
Slide 246 text
@holly_cummins #Quarkus
Slide 247
Slide 247 text
No content
Slide 248
Slide 248 text
@holly_cummins #Quarkus
“After a week of development with
Quarkus, I was able to regain the
same level of productivity as when
I was developing with Spring Boot.”
– Fawaz Paraïso, Decathlon
Slide 249
Slide 249 text
the double-win
Slide 250
Slide 250 text
No content
Slide 251
Slide 251 text
co-benefits
Slide 252
Slide 252 text
co-benefits
the double win
Slide 253
Slide 253 text
co-benefits
the double win
win-win
Slide 254
Slide 254 text
co-benefits
the double win
win-win
twofer
Slide 255
Slide 255 text
co-benefits
the double win
win-win
twofer
überwinden
Slide 256
Slide 256 text
co-benefits
the double win
win-win
twofer
überwinden
Slide 257
Slide 257 text
No content
Slide 258
Slide 258 text
cheaper at low load
Slide 259
Slide 259 text
cheaper at low load
cheaper at high load
Slide 260
Slide 260 text
cheaper at low load
cheaper at high load
greener
Slide 261
Slide 261 text
cheaper at low load
cheaper at high load
greener
more productive
Slide 262
Slide 262 text
cheaper at low load
cheaper at high load
greener
more productive
happier
Slide 263
Slide 263 text
@holly_cummins #Quarkus
tl;dpa
(too long didn’t pay attention)
deployment density
lower cloud bill
frictionless development experience
Medium Nano
auto-provision services
zero-con
fi
g live coding
continuous testing
developer UI
greener
happy, productive people
Slide 264
Slide 264 text
@holly_cummins #Quarkus
stl;dpa
(still too long didn’t pay attention)
e
ffi
ciency
quarkus can be packed ~2x more
densely than spring boot
quarkus can handle ~2x more
tra
ffi
c on the same hardware
developer experience
quarkus creates joy
quarkus boosts productivity by
Slide 265
Slide 265 text
@holly_cummins #Quarkus
stl;dpa
(still too long didn’t pay attention)
e
ffi
ciency
quarkus can be packed ~2x more
densely than spring boot
quarkus can handle ~2x more
tra
ffi
c on the same hardware
developer experience
quarkus creates joy
quarkus boosts productivity by
2x
less infra
Slide 266
Slide 266 text
@holly_cummins #Quarkus
stl;dpa
(still too long didn’t pay attention)
e
ffi
ciency
quarkus can be packed ~2x more
densely than spring boot
quarkus can handle ~2x more
tra
ffi
c on the same hardware
developer experience
quarkus creates joy
quarkus boosts productivity by
40%
more productive
2x
less infra