The goal of this project is to compare some Java Microservices Frameworks like: Quarkus, Micronaut and Spring Boot. For it, we will implement applications using those frameworks, build their JVM and Native Docker images and measure start-up times, memory footprint, etc.
On ivangfr.github.io, I have compiled my Proof-of-Concepts (PoCs) and articles. You can easily search for the technology you are interested in by using the filter. Who knows, perhaps I have already implemented a PoC or written an article about what you are looking for.
- [Medium] Java Microservice Framework’s Battles: Quarkus vs Micronaut vs Spring Boot
- [Medium] Unveiling the Java Microservice Frameworks Battle: Insights, Earnings, and GitHub Contributions
- [Medium] Battle: Quarkus 3.7.2 vs. Micronaut 4.3.1 vs. Spring Boot 3.2.2
- [Medium] Battle: Quarkus 3.12.0 vs. Micronaut 4.5.0 vs. Spring Boot 3.3.1
- [Medium] Battle: Quarkus 3.14.2 vs. Micronaut 4.6.1 vs. Spring Boot 3.3.3
- [Medium] Battle: Quarkus 3.15.1 vs. Micronaut 4.6.3 vs. Spring Boot 3.3.4
- [Medium] Battle: Quarkus 3.21.0 vs. Micronaut 4.7.6 vs. Spring Boot 3.4.4
- [Medium] Battle: Quarkus 3.24.3 vs. Micronaut 4.9.0 vs. Spring Boot 3.5.3
| Framework | Version |
|---|---|
| Quarkus | 3.34.3 |
| Micronaut | 4.10.11 |
| Spring Boot | 4.0.5 |
For fair benchmarking across frameworks, the Quarkus and Micronaut applications are configured to use 200 worker threads, matching Spring Boot's default Tomcat thread pool.
| Framework | Configuration Property | Default (without config) |
|---|---|---|
| Spring Boot | Tomcat default | 200 |
| Quarkus | quarkus.thread-pool.max-threads=200 |
Math.max(8×CPU, 200) |
| Micronaut | Tomcat default | 200 |
Java 17or higher;- A containerization tool (e.g.,
Docker,Podman, etc.) Bash 4.0or higher (macOS ships with Bash 3.2; install viabrew install bash)
The application’s JVM and Native Docker images can be found in this Docker Hub link.
We've implemented bash scripts to build, manage, and verify Docker images for the frameworks comparison.
-
build-docker-images.sh Packages JAR files (via Maven) and builds Docker images for JVM or Native applications. Supports targeting all apps, by framework (quarkus/micronaut/springboot), by type (simple-api/jpa-mysql/kafka/elasticsearch), or specific apps.
-
remove-docker-images.sh Removes Docker images. Supports targeting all, by framework, by type, or specific apps.
-
push-docker-images.sh Pushes Docker images to Docker Hub (or another registry). Supports targeting all, by framework, by type, or specific apps.
-
tag-docker-images.sh Tags local Docker images with specific version tags (e.g., v1.0, latest). Supports targeting all, by framework, by type, or specific apps.
-
verify-docker-images.sh Starts Docker containers and runs HTTP tests to verify applications are working correctly. Tests different scenarios: simple-api, jpa-mysql, kafka (producer/consumer), elasticsearch. Also exports results to CSV.
Common options for all scripts:
--builder=BUILDER— Container builder (podman or docker)--quarkus-version=TAG— Quarkus image tag--micronaut-version=TAG— Micronaut image tag--springboot-version=TAG— Spring Boot image tag--dry-run— Show what would be done without executing-h, --help— Show help
If you find this useful, consider buying me a coffee:
This project is licensed under the MIT License.
