{"id":15013786,"url":"https://github.com/ivangfr/graalvm-quarkus-micronaut-springboot","last_synced_at":"2025-04-05T03:06:37.027Z","repository":{"id":42982078,"uuid":"215000327","full_name":"ivangfr/graalvm-quarkus-micronaut-springboot","owner":"ivangfr","description":"The goal of this project is to compare some Java Microservice 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.","archived":false,"fork":false,"pushed_at":"2024-10-17T04:34:06.000Z","size":1800,"stargazers_count":131,"open_issues_count":0,"forks_count":41,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-03-29T02:03:55.479Z","etag":null,"topics":["cadvisor","docker","elasticsearch","graalvm","java","jib","kafka","micronaut","mysql","native","quarkus","spring-boot","webflux"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ivangfr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"ivangfr"}},"created_at":"2019-10-14T09:20:05.000Z","updated_at":"2025-02-28T12:22:13.000Z","dependencies_parsed_at":"2023-01-22T22:15:36.324Z","dependency_job_id":"1879b8fe-6cd3-4c60-8843-6b9abcf506b4","html_url":"https://github.com/ivangfr/graalvm-quarkus-micronaut-springboot","commit_stats":{"total_commits":223,"total_committers":2,"mean_commits":111.5,"dds":0.008968609865470878,"last_synced_commit":"41353707bd4e641500e64758bb6502bbf17330bc"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivangfr%2Fgraalvm-quarkus-micronaut-springboot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivangfr%2Fgraalvm-quarkus-micronaut-springboot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivangfr%2Fgraalvm-quarkus-micronaut-springboot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivangfr%2Fgraalvm-quarkus-micronaut-springboot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ivangfr","download_url":"https://codeload.github.com/ivangfr/graalvm-quarkus-micronaut-springboot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247280263,"owners_count":20912967,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cadvisor","docker","elasticsearch","graalvm","java","jib","kafka","micronaut","mysql","native","quarkus","spring-boot","webflux"],"created_at":"2024-09-24T19:44:46.964Z","updated_at":"2025-04-05T03:06:37.019Z","avatar_url":"https://github.com/ivangfr.png","language":"Shell","funding_links":["https://github.com/sponsors/ivangfr"],"categories":[],"sub_categories":[],"readme":"# graalvm-quarkus-micronaut-springboot\n\nThe goal of this project is to compare some Java Microservices Frameworks like: [`Quarkus`](https://quarkus.io/), [`Micronaut`](https://micronaut.io/) and [`Spring Boot`](https://docs.spring.io/spring-boot/index.html). For it, we will implement applications using those frameworks, build their JVM and Native Docker images and measure start-up times, memory footprint, etc.\n\n## Proof-of-Concepts \u0026 Articles\n\nOn [ivangfr.github.io](https://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.\n\n## Additional Readings\n\n- \\[**Medium**\\] [**Java Microservice Framework’s Battles: Quarkus vs Micronaut vs Spring Boot**](https://medium.com/@ivangfr/java-microservice-frameworks-battles-quarkus-vs-micronaut-vs-spring-boot-2321dc5712ae)\n- \\[**Medium**\\] [**Unveiling the Java Microservice Frameworks Battle: Insights, Earnings, and GitHub Contributions**](https://medium.com/@ivangfr/unveiling-the-java-microservice-frameworks-battle-insights-earnings-and-github-contributions-6540cd0a0a1a)\n- \\[**Medium**\\] [**Battle: Quarkus 3.7.2 vs. Micronaut 4.3.1 vs. Spring Boot 3.2.2**](https://medium.com/@ivangfr/battle-quarkus-3-7-2-vs-micronaut-4-3-1-vs-spring-boot-3-2-2-8d6765e15e45)\n- \\[**Medium**\\] [**Battle: Quarkus 3.12.0 vs. Micronaut 4.5.0 vs. Spring Boot 3.3.1**](https://medium.com/@ivangfr/battle-quarkus-3-12-0-vs-micronaut-4-5-0-vs-spring-boot-3-3-1-b9a4424fc52f)\n- \\[**Medium**\\] [**Battle: Quarkus 3.14.2 vs. Micronaut 4.6.1 vs. Spring Boot 3.3.3**](https://medium.com/@ivangfr/battle-quarkus-3-14-2-vs-micronaut-4-6-1-vs-spring-boot-3-3-3-41947196fb31)\n- \\[**Medium**\\] [**Battle: Quarkus 3.15.1 vs. Micronaut 4.6.3 vs. Spring Boot 3.3.4**](https://medium.com/@ivangfr/battle-quarkus-3-15-1-vs-micronaut-4-6-3-vs-spring-boot-3-3-4-9ae4a7cefac6)\n\n## Categories\n\n- ### [simple-api](https://github.com/ivangfr/graalvm-quarkus-micronaut-springboot/tree/master/simple-api#graalvm-quarkus-micronaut-springboot)\n- ### [jpa-mysql](https://github.com/ivangfr/graalvm-quarkus-micronaut-springboot/tree/master/jpa-mysql#graalvm-quarkus-micronaut-springboot)\n- ### [kafka](https://github.com/ivangfr/graalvm-quarkus-micronaut-springboot/tree/master/kafka#graalvm-quarkus-micronaut-springboot)\n- ### [elasticsearch](https://github.com/ivangfr/graalvm-quarkus-micronaut-springboot/tree/master/elasticsearch#graalvm-quarkus-micronaut-springboot)\n\n## Latest Framework Version Used\n\n| Framework   | Version |\n|-------------|---------|\n| Quarkus     | 3.21.0  |\n| Micronaut   | 4.7.6   |\n| Spring Boot | 3.4.4   |\n\n## Prerequisites\n\n- [`Java 17`](https://www.oracle.com/java/technologies/downloads/#java17) or higher;\n- A containerization tool (e.g., [`Docker`](https://www.docker.com), [`Podman`](https://podman.io), etc.)\n\n## Docker Images\n\nThe application’s JVM and Native Docker images can be found in [this Docker Hub link](https://hub.docker.com/search?q=ivanfranchin).\n\n## Bash scripts\n\nWe've implemented three bash scripts that collect data used in the frameworks comparison.\n\n- **collect-jvm-jar-docker-size-times.sh**\n  \n  It packages JAR files and builds Docker images for JVM applications, collecting data such as JAR packaging time, JAR size, Docker image build time, and Docker image size.\n\n- **collect-native-jar-docker-size-times.sh**\n\n  It packages JAR files and builds Docker images for native applications, collecting data such as JAR packaging time, JAR size, Docker image build time, and Docker image size.\n\n- **collect-ab-times-memory-usage.sh**\n\n  It starts the container for JVM and native applications, collecting data such as startup time, initial memory usage, time taken to run A/B tests for the first time and (after a warm-up period) for the second time, final memory usage, and shutdown time.\n\n- **remove-jvm-docker-images.sh**\n\n  It removes the Docker image of JVM applications.\n\n- **remove-native-docker-images.sh**\n\n  It removes the Docker image of Native applications.\n\n## AB Tests\n\n  ```text\n                       Application | ab Test                                                                                     |\n  -------------------------------- + ------------------------------------------------------------------------------------------- |\n            quarkus-simple-api-jvm | ab -c 2 -n 6000 'http://localhost:9080/api/greeting?name=Ivan'                              |\n          micronaut-simple-api-jvm | ab -c 2 -n 6000 'http://localhost:9082/api/greeting?name=Ivan'                              |\n         springboot-simple-api-jvm | ab -c 2 -n 6000 'http://localhost:9084/api/greeting?name=Ivan'                              |\n         quarkus-simple-api-native | ab -c 2 -n 6000 'http://localhost:9081/api/greeting?name=Ivan'                              |\n       micronaut-simple-api-native | ab -c 2 -n 6000 'http://localhost:9083/api/greeting?name=Ivan'                              |\n      springboot-simple-api-native | ab -c 2 -n 6000 'http://localhost:9085/api/greeting?name=Ivan'                              |\n  ................................ + ........................................................................................... |\n             quarkus-jpa-mysql-jvm | ab -p test-book.json -T 'application/json' -c 2 -n 4000 http://localhost:9086/api/books     |\n           micronaut-jpa-mysql-jvm | ab -p test-book.json -T 'application/json' -c 2 -n 4000 http://localhost:9088/api/books     |\n          springboot-jpa-mysql-jvm | ab -p test-book.json -T 'application/json' -c 2 -n 4000 http://localhost:9090/api/books     |\n          quarkus-jpa-mysql-native | ab -p test-book.json -T 'application/json' -c 2 -n 4000 http://localhost:9087/api/books     |\n        micronaut-jpa-mysql-native | ab -p test-book.json -T 'application/json' -c 2 -n 4000 http://localhost:9089/api/books     |\n       springboot-jpa-mysql-native | ab -p test-book.json -T 'application/json' -c 2 -n 4000 http://localhost:9091/api/books     |\n  ................................ + ........................................................................................... |\n        quarkus-kafka-producer-jvm | ab -p test-news.json -T 'application/json' -c 2 -n 6000 http://localhost:9100/api/news      |\n      micronaut-kafka-producer-jvm | ab -p test-news.json -T 'application/json' -c 2 -n 6000 http://localhost:9102/api/news      |\n     springboot-kafka-producer-jvm | ab -p test-news.json -T 'application/json' -c 2 -n 6000 http://localhost:9104/api/news      |\n     quarkus-kafka-producer-native | ab -p test-news.json -T 'application/json' -c 2 -n 6000 http://localhost:9101/api/news      |\n   micronaut-kafka-producer-native | ab -p test-news.json -T 'application/json' -c 2 -n 6000 http://localhost:9103/api/news      |\n  springboot-kafka-producer-native | ab -p test-news.json -T 'application/json' -c 2 -n 6000 http://localhost:9105/api/news      |\n  ................................ + ........................................................................................... |\n         quarkus-elasticsearch-jvm | ab -p test-movies.json -T 'application/json' -c 2 -n 4000 http://localhost:9112/api/movies  |\n       micronaut-elasticsearch-jvm | ab -p test-movies.json -T 'application/json' -c 2 -n 4000 http://localhost:9114/api/movies  |\n      springboot-elasticsearch-jvm | ab -p test-movies.json -T 'application/json' -c 2 -n 4000 http://localhost:9116/api/movies  |\n      quarkus-elasticsearch-native | ab -p test-movies.json -T 'application/json' -c 2 -n 4000 http://localhost:9113/api/movies  |\n    micronaut-elasticsearch-native | ab -p test-movies.json -T 'application/json' -c 2 -n 4000 http://localhost:9115/api/movies  |\n   springboot-elasticsearch-native | ab -p test-movies.json -T 'application/json' -c 2 -n 4000 http://localhost:9117/api/movies  |\n  ```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivangfr%2Fgraalvm-quarkus-micronaut-springboot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fivangfr%2Fgraalvm-quarkus-micronaut-springboot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivangfr%2Fgraalvm-quarkus-micronaut-springboot/lists"}