Skip to content

Instantly share code, notes, and snippets.

@manoelcampos
Created July 11, 2025 17:25
Show Gist options
  • Save manoelcampos/4b19f5e2ff49ad5f53c948133480b898 to your computer and use it in GitHub Desktop.
Save manoelcampos/4b19f5e2ff49ad5f53c948133480b898 to your computer and use it in GitHub Desktop.
Quarkus vs Spring/SpringBoot

Quarkus

Spring / SpringBoot

Geral

Não precisa de uma extensão adicional e nem configuração no IDE para fazer hot reload (já é padrão)

Precisa da dependência Spring DevTools (que pode precisar de configuração no IDE)

Não precisa de uma classe Application para iniciar a app, apesar de poder ser adicionada para configuar a mesma (como usando @ApplicationPath("/api") para definir o caminho raiz da API REST)

Precisa de uma classe Application com um método main e também permite configurar a aplicação.

REST Controllers

Usa anotações da API Jakarta RESTful Web Services

Usa anotações próprias

Sugere o sufixo Resource por convenção para classes contendo endpoints (mais aderente ao estilo REST)

Sugere o sufixo Controller por convenção para classes contendo endpoints (mais aderente ao padrão MVC)

Caminho base dos endpoints de um resource/controller são definidos como por exemplo, @Path("/product")

Caminho base dos endpoints de um resource/controller são definidos como por exemplo, @RequestMapping("/product")

Não precisa de uma anotação @RestController

Precisa de anotação @RestController

Anotações que definem o verbo HTTP permitido para um método tem exatamente o nome do verbo em maiúsculas, como @GET, @POST, etc

Anotações que definem o verbo HTTP permitido para um método sequem o padrão @VerboMapping, como @GetMapping, @PostMapping, etc.

Para que objetos enviados no body da requisição sejam recebidos, o parâmetro do método do endpoint não precisa de uma anotação @RequestBody

A anotação é obrigatória

Acesso a Dados / Repositories: ambos tem suporte a JPA/Hibernate

Possui a extensão Quarkus Panache que segue uma abordagem opinada para fornecer operações CRUD diretamente nas classes de entidade do seu projeto (classes anotadas com @Entity e que estendem PanacheEntity ou PanacheEntityBase). Panache segue o padrão Active Record

Não possui opção parecida

Também tem suporte a repositórios

Por meio de interfaces Repository, anotadas com @Repository e que estendem alguma outra interface do Spring como ListCrudRepository. A implementação de tais interfaces que você cria é feita automaticamente pelo Spring.

Injeção de Dependências

Usa a anotação @Inject do CDI, padrão da JakartaEE

Usa a anotação própria @Autowired ou injeção via parâmetros no construtor (mais recomendado, principalmente para permitir testes com Mocks usando bibliotecas como Mockito).

Compilação Nativa

Suporte nativo à GraalVM desde o início, já configurado quando se cria um projeto

O suporte só veio com Spring Boot 3.0 e requer a adição do plugin native-maven-plugin

REST Clients

Permite definir clientes de APIs REST de forma declarativa, onde você apenas cria uma interface usando as mesmas anotações que usa para controllers e o Quarkus cria a implementação dela pra você. Precisa das extensões quarkus-rest-client e quarkus-rest-client-jsonb (para serialização JSON).

Também permite isso por meio da dependências OpenFeign (que usa as mesmas anotações dos controllers em Spring) e mais recentemente Spring Interface Clients (que usa o padrão @VerboHttpExchange, como @GetExchange).

Cloud Native/Microservices (como Health Check e Tolerância à Falhas)

Implementação fornecida pelas extensões quarkus-smallrye-* do SmallRye, uma implementação da especificação MicroProfile.

Fornecida por meio do Spring Cloud.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment