Share
Embed
Migration to Quarkus from Spring Boot PetClinic REST
In this presentation I will introduce Quarkus and also show which were the steps followed to migrate Spring PetClinic REST application to Quarkus using the standard libraries : resteasy, microprofile metrics, hibernate, openapi, .... GraalVM
Jonathan Vila
October 01, 2020
Transcript
61 slides
-
Contents 1. who am i 2. what can you expect
3. what is quarkus 4. why migrate 5. migration a. application description b. steps 6. performance comparative 7. references -
$ whoami JUG organiser at BarcelonaJUG Cofounder of JBCNConf (
Barcelona ) Software Engineer at Red Hat App. Modernisation and Migration team @vilojona [email protected] aytartana.wordpress.com github.com/jonathanvila -
What can you expect ? My experience v 2.2.5 v
1.7.0 opinionated option magistral lecture something that works THE way QUARKUS -
What is Quarkus ? A Kubernetes Native, Java, Scala, Kotlin
stack tailored for GraalVM and OpenJDK HotSpot crafted from the best of breed Java libraries and standards. -
300x faster 10x smaller focused on easy to code opensource
fast paced releases tons of extensions Quarkus key facts -
Quarkus extensions ( > 90 ) Kafka Camel Keycloak Spring
Vert.x RestEasy …. Microprofile Openshift Jaegger Flyway Hibernate Infinispan ... -
Quarkus evolution 2018-12 v 0.0.1 2019-06 v 0.15.0 2019-11 v
1.0.0 Release 2020-01 v 1.2.0 1 minor version every 2 weeks !!! (+/-) -
Why to migrate My experience easy to develop with an
easy CDI, REST, … long startup times, eternal tests heavyweight too many things happen under the hood easy to develop applications fast lightweight GraalVM compatible QUARKUS ✅ FaaS compatible ( lambdas ) ✅ less money on public cloud -
Application migrated Spring Data ( repositories, jdbc , ... )
Spring Web ( REST ) Spring Security Spring documentation ( Swagger ) Spring actuators Spring micrometer Spring CDI Spring AOP Spring cache Hibernate Panache JaxRS Quarkus Security OpenAPI SmallRye Health Microprofile Metrics CDI Spec ( Arc ) --- Quarkus cache ( Caffeine ) QUARKUS -
Elements not migrated Spring JDBC querying * no helper methods
to work with Inserts, Updates…. * no equivalent to org.springframework.jdbc.core classes * we need to reimplement everything using AGROAL JMX * not supported by GraalVM definition -
CDI • Replace Autowired by Inject • Beans declaration using
@ApplicationScoped • Auto injection on Constructors • Lazy by default -
CDI PROs • straight forward migration for Beans • no
feature missing CONs • no annotation built-in beans injection depending on Profile • no private members on injection -
JPA Repositories • Repository classes to implement PanacheRepositoryBase<T, Integer> Quarkus
will generate the implementation of the usual methods : list , find, persist, delete -
Spring REST to JAX-RS • Move from Spring REST to
the standard JAX-RS @RestController @RequestMapping, @GetMapping, @PostMapping, @PutMapping, @DeleteMapping @PathVariable @Path @GET, @POST, @PUT @DELETE @PathParam QUARKUS -
Spring REST to JAX-RS PROs • straightforward migration INFO •
Spring also supports JAX-RS as 3rd party lib -
Spring REST JDBC Security to Elytron JDBC realm Add extension
dependency : elytron-security-jdbc Configure on properties file and remove configureGlobal method -
Spring REST Security to Quarkus security PROs • Almost the
same result • By configuration rather than code CONs • Quarkus doesn’t have an expression language -
CORS PROs • easy to enable , no code involved
CONs • at global level, not per Controller -
Metrics • Add smallRye metrics extension • Annotate each method
( for custom metrics ) -
Metrics PROs • OpenMetrics standard naming CONs • different naming
than micrometer ( compatibility toggle being developed ) • not the same metrics • no AOP so you need to annotate every method -
Validation • Spring Validation to Hibernate Validator • Move from
@ControllerAdvice to JAX-RS ExceptionMapper -
Swagger ( OpenAPI v 3.0 ) • Add extension “openapi”
• extend Application -
Swagger ( OpenAPI v 3.0 ) PROs • straightforward migration
• standard and easy way to configure • Swagger-UI OOTB CONs • not REST paths scan configuration -
AOP for repository metrics • using Hibernate built in metrics
enabled in properties -
AOP for app metrics PROs • standard • easy to
customise CONs • need to annotate ALL methods one by one for custom app metrics • no expression language to define methods affected -
Local caching • Spring uses a default ConcurrentHashMap • Caffeine
uses a ConcurrentLinkedHashMap • Add “cache” extension ( Caffeine ) and annotate the method -
Local Caching PROs • easy to implement and configure •
straightforward migration CONs • none -
Test REST PROs • RESTassured is easy to handle and
very intuitive CONs • No way to simulate Roles without creating an user for each role to test INFO • Changed JSonPath to GPath -
Test - resources • Annotate test suites with @QuarkusTest to
boot the app • Annotate test suites with @QuarkusTestResource to load an embedded resource -
Test - Mock • Use the quarkus-mockito dependency : quarkus-junit5-mockito
• Annotate mocks with @InjectMock -
Spring WEB ( REST) : spring-web extension Using same Spring
API for REST Supported Annotations @RestController @RequestMapping @GetMapping @PostMapping @PutMapping @DeleteMapping @PatchMapping @RequestParam @RequestHeader @MatrixVariable @PathVariable @CookieValue @RequestBody @ResponseStatus @ExceptionHandler -
Spring DI : spring-di extension Using same API as Spring
DI Annotations Supported @Autowired @Repository @Qualifier @Scope @Value @Component * doesn’t support an expression language @Configuration @Service @Bean -
Spring Data : spring-data-jpa Using same API for Spring Data
Supported Any interface of : Repository, CrudRepository, PagingAndSortingRepository, JpaRepository Derived Query Methods User defined Queries Not Supported Invocations to any method of QueryByExampleExecutor QueryDSL -
Spring Security: spring-security extension Using same API as Spring Security
Annotations Supported @Secured @Preauthorized Expressions allowed hasAnyRole permitAll denyAll isAnonymous isAuthenticated #paramName == -
Performance comparative (shallow) SPRING BOOT 2.2.5 QUARKUS Hotspot 1.8 QUARKUS
GraalVM 20.1 build ( uber-jar ) 4.3 s 48 Mb 13 s 42 Mb 185 s 97 Mb boot 6.8 s 630 Mb 2.6 s ( 3x ) 251 Mb ( 2.5x ) 0.462 s ( 15x ) 21 Mb ( 30x ) -
Repositories • Spring REST PetClinic https://github.com/spring-petclinic/spring-petclinic-rest • Quarkus REST PetClinic
https://github.com/jonathanvila/spring-petclinic-rest/tree/quarkus Documentation/News/Help • https://quarkus.io • @QuarkusIO • https://developers.redhat.com/search/?t=quarkus • [email protected] -
Interactive Tutorials ( Katacoda ) • https://developers.redhat.com/courses/quarkus/ List of Tutorials
• Getting Started • For Spring Devs • Streaming with Kafka • Hibernate and Panache • Prometeus & Grafana -
• Rules to help to migrate from SB to Quarkus
( MTA 5.0 ) ◦ Opensource tool to help on applications migrations ▪ https://developers.redhat.com/products/mta/overview ▪ https://github.com/windup ◦ 26 rules , covering ▪ DI ▪ Integration ▪ Metrics ▪ JPA ▪ Security ▪ Web ▪ Shell ▪ …. Red Hat MTA (Migration Toolkit for Applications) -
• Rules to help to migrate from SB to Quarkus
( MTA 5.0 ) ◦ Opensource tool to help on applications migrations ▪ https://developers.redhat.com/products/mta/overview ▪ https://github.com/windup ◦ 26 rules , covering ▪ DI ▪ Integration ▪ Metrics ▪ JPA ▪ Security ▪ Web ▪ Shell ▪ …. Red Hat MTA (Migration Toolkit for Applications) -
• Rules to help to migrate from SB to Quarkus
( MTA 5.0 ) ◦ Opensource tool to help on applications migrations ▪ https://developers.redhat.com/products/mta/overview ▪ https://github.com/windup ◦ 26 rules , covering ▪ DI ▪ Integration ▪ Metrics ▪ JPA ▪ Security ▪ Web ▪ Shell ▪ …. Red Hat MTA (Migration Toolkit for Applications) -
• Rules to help to migrate from SB to Quarkus
( MTA 5.0 ) ◦ Opensource tool to help on applications migrations ▪ https://developers.redhat.com/products/mta/overview ▪ https://github.com/windup ◦ 26 rules , covering ▪ DI ▪ Integration ▪ Metrics ▪ JPA ▪ Security ▪ Web ▪ Shell ▪ …. ◦ Plugin for Eclipse (Che), VSCode Red Hat MTA (Migration Toolkit for Applications) -
• Rules to help to migrate from SB to Quarkus
( MTA 5.0 ) ◦ Opensource tool to help on applications migrations ▪ https://developers.redhat.com/products/mta/overview ▪ https://github.com/windup ◦ 26 rules , covering ▪ DI ▪ Integration ▪ Metrics ▪ JPA ▪ Security ▪ Web ▪ Shell ▪ …. Red Hat MTA (Migration Toolkit for Applications) -
• Rules to help to migrate from SB to Quarkus
( MTA 5.0 ) ◦ Opensource tool to help on applications migrations ▪ https://developers.redhat.com/products/mta/overview ▪ https://github.com/windup ◦ 26 rules , covering ▪ DI ▪ Integration ▪ Metrics ▪ JPA ▪ Security ▪ Web ▪ Shell ▪ …. ◦ Plugin for Eclipse (Che), VSCode Red Hat MTA (Migration Toolkit for Applications) -
Real use cases Lufthansa Technik AVIATAR experiences significant cloud resources
savings by moving to Kubernetes-native Quarkus (link) Suomen Asiakastieto Oy chooses Quarkus for their microservices development (link) Vodafone Greece replaces Spring Boot with Quarkus (link) • “Quarkus offers by default (without trying to optimize it) is 50%-60% more lightweight (in JVM mode) that what Spring offers” • “30 to 40% better developer productivity vis-a-vis Spring Boot,” Public Clouds exp. -- Internal Labs --- Save up to : • 37 % on Cloud ( Quarkus JVM ) • 71 % on Cloud ( Quarkus + GraalVM ) -
Books ( devs not only consume tech ) Sci Fy
Mind Novel