{"id":50835616,"url":"https://github.com/ichwansh03/spring-async","last_synced_at":"2026-06-14T03:05:36.430Z","repository":{"id":218518117,"uuid":"746580016","full_name":"ichwansh03/spring-async","owner":"ichwansh03","description":"Spring async, monitoring and introduction webflux (beginner)","archived":false,"fork":false,"pushed_at":"2024-02-03T04:07:42.000Z","size":89,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-02-03T09:37:29.024Z","etag":null,"topics":["async","java","spring","spring-monitoring"],"latest_commit_sha":null,"homepage":"","language":"Java","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/ichwansh03.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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}},"created_at":"2024-01-22T09:45:05.000Z","updated_at":"2024-02-03T09:37:29.025Z","dependencies_parsed_at":"2024-02-02T09:34:27.890Z","dependency_job_id":null,"html_url":"https://github.com/ichwansh03/spring-async","commit_stats":null,"previous_names":["ichwansh03/spring-async"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ichwansh03/spring-async","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ichwansh03%2Fspring-async","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ichwansh03%2Fspring-async/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ichwansh03%2Fspring-async/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ichwansh03%2Fspring-async/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ichwansh03","download_url":"https://codeload.github.com/ichwansh03/spring-async/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ichwansh03%2Fspring-async/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34307687,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-14T02:00:07.365Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["async","java","spring","spring-monitoring"],"created_at":"2026-06-14T03:05:35.548Z","updated_at":"2026-06-14T03:05:36.425Z","avatar_url":"https://github.com/ichwansh03.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[Introduction to Spring Scheduling and monitoring the task with Spring Actuator ️🕛️📈️](https://ichwansholihin.medium.com/create-scheduled-and-monitoring-tasks-with-scheduling-and-spring-actuator-b61aa38417eb)\n\n## Spring Async\n\n* Untuk mengaktifkan fitur asynchronous pada spring, tambahkan anotasi `@EnableAsync` pada config class. Pada level method, tambahkan `@Async` untuk menandakan bahwa method tersebut harus dijalankan secara asynchronous.\n* Jika ingin mengubah default thread-pool, [Docs](https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties.core.spring.task.execution.pool.allow-core-thread-timeout)\n* Jika ingin mengaktifkan fitur schedule, tambahkan anotasi `@EnableScheduling` pada config class. Pada level method, tambahkan `@Scheduled` untuk menandakan bahwa method tersebut dijalankan secara periodik. [Scheduled Docs](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/annotation/Scheduled.html)\n* Scheduled akan otomatis dijalankan ketika spring running, berbeda dengan Async.\n* Cron job digunakan untuk eksekusi scheduled, menggunakan ekspresi `* * * * * *` yg berarti ekspresi tersebut akan dieksekusi setiap detik. Gunakan template cron berikut [Crontab](https://crontab.guru/)\n\n## Spring Reactive Webflux\n\n* Spring webflux adalah aplikasi spring pada web yang reactive, berbeda dengan spring web mvc pada umumnya. Reactive disini artinya teknik programming yg menggunakan metode async dan non-blocking.\n* Webflux dalam case example biasanya sering digunakan pada aplikasi web yg mengalami bottleneck pada proses I/O atau proses input-outputnya lambat. Ketimbang membuat thread untuk semua request, kita cukup gunakan thread yg ada di processor lalu satu thread itu dijalankan secara bergantian/non-blocking. kecuali jika terdapat proses non-I/O (CPU bound) tidak perlu gunakan webflux.\n* Dokumentasi spring webflux [Docs](https://docs.spring.io/spring-framework/reference/web/webflux.html) \n* Jika menggunakan spring reactive, database juga harus menggunakan r2dbc.\n* Spring reactive tidak support dengan automation db schema, jadi perlu menggunakan db migration tool seperti flyway db.\n* Core dari spring reactive ada di publisher dan subscribernya, yakni penggunaan class Flux untuk collection resource dan class Mono untuk single resource\n\n## Spring Monitoring\n\n* Di Spring, terdapat fitur untuk monitoring endpoint, namanya Spring Actuator. Tambahkan dependenct spring boot starter actuator, lalu akses dengan `localhost:8080/actuator`.\n* Heapdump digunakan untuk mengecek apakah terdapat memory leak pada sebuah object atau tidak. Gunakan aplikasi Visual VM untuk melihat hasil download dari file heapdump.\n* Jika ingin memvisualisasikan actuator, gunakan [Micrometer](https://micrometer.io/) untuk melihat grafik metric\n\nReference:\n[Getting Started with Spring Webflux](https://reflectoring.io/getting-started-with-spring-webflux/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fichwansh03%2Fspring-async","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fichwansh03%2Fspring-async","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fichwansh03%2Fspring-async/lists"}