{"id":14981045,"url":"https://github.com/hoangtien2k3/reactify-core","last_synced_at":"2025-08-14T12:37:20.473Z","repository":{"id":253915609,"uuid":"844920178","full_name":"hoangtien2k3/reactify-core","owner":"hoangtien2k3","description":"Java library for developing reactive programming(reactor-core) backend systems in microservices","archived":false,"fork":false,"pushed_at":"2025-07-06T16:26:47.000Z","size":1526,"stargazers_count":25,"open_issues_count":22,"forks_count":5,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-07-06T17:36:35.153Z","etag":null,"topics":["caching","call-api","elasticsearch","java21","kafka","keycloak","microservices-architecture","minio","minio-server","oauth2","postgresql","reactor-core","redis-cache","restfull-api","security","trace-log","webflux"],"latest_commit_sha":null,"homepage":"https://reactify-sand.vercel.app","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hoangtien2k3.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-08-20T08:20:08.000Z","updated_at":"2025-06-09T10:45:49.000Z","dependencies_parsed_at":"2025-01-10T18:18:58.340Z","dependency_job_id":"21d4e4fb-a933-4514-b427-fcae033c174e","html_url":"https://github.com/hoangtien2k3/reactify-core","commit_stats":{"total_commits":76,"total_committers":2,"mean_commits":38.0,"dds":"0.013157894736842146","last_synced_commit":"9eaf8597bf6b9467c9371212d39785e1856ca8f3"},"previous_names":["hoangtien2k3/fw-commons","hoangtien2k3/reactify","hoangtien2k3/reactify-core"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/hoangtien2k3/reactify-core","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hoangtien2k3%2Freactify-core","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hoangtien2k3%2Freactify-core/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hoangtien2k3%2Freactify-core/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hoangtien2k3%2Freactify-core/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hoangtien2k3","download_url":"https://codeload.github.com/hoangtien2k3/reactify-core/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hoangtien2k3%2Freactify-core/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270421722,"owners_count":24580814,"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","status":"online","status_checked_at":"2025-08-14T02:00:10.309Z","response_time":75,"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":["caching","call-api","elasticsearch","java21","kafka","keycloak","microservices-architecture","minio","minio-server","oauth2","postgresql","reactor-core","redis-cache","restfull-api","security","trace-log","webflux"],"created_at":"2024-09-24T14:02:47.370Z","updated_at":"2025-08-14T12:37:20.450Z","avatar_url":"https://github.com/hoangtien2k3.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch3 align=\"center\"\u003e\n\u003cimg src=\"reactify_banner.png\" alt=\"reactify-core\" width=\"300\" /\u003e\n\n\u003ca href=\"https://github.com/hoangtien2k3/reactify/blob/main/docs/en/README.md\"\u003e📚Docs\u003c/a\u003e |\n\u003ca href=\"https://discord.com/invite/dhCKEJmG\"\u003e💬Chat\u003c/a\u003e |\n\u003ca href=\"https://github.com/hoangtien2k3/keycloak-auth-service\"\u003e✨Live Demo\u003c/a\u003e\n\u003c/h3\u003e\n\n## Powerful Reactive Java Library for Spring WebFlux\n\n[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=hoangtien2k3_reactify\u0026metric=ncloc)](https://sonarcloud.io/summary/overall?id=hoangtien2k3_reactify)\n[![GitHub Release](https://img.shields.io/github/v/release/hoangtien2k3/reactify?label=latest%20release)](https://mvnrepository.com/artifact/io.github.hoangtien2k3/reactify-core)\n[![License](https://img.shields.io/badge/license-Apache--2.0-green.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)\n[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/9383/badge)](https://www.bestpractices.dev/projects/9383)\n[![Build status](https://github.com/ponfee/commons-core/workflows/build-with-maven/badge.svg)](https://github.com/hoangtien2k3/reactify/actions)\n\n🚀 Supercharge your reactive microservices with Reactify – a high-performance Java library built on Spring WebFlux and\nReactor Core, designed to streamline backend development with essential tools for modern reactive systems.\n\n🔥 Features\n\n- ✔ Seamless Keycloak Integration – Secure your apps effortlessly with built-in Keycloak support.\n- ✔ Smart Caching – Boost performance with reactive caching mechanisms.\n- ✔ Utility Helpers – Handy utilities to reduce boilerplate and speed up development.\n- ✔ Reactive API Client – Effortless HTTP calls with non-blocking, reactive HTTP clients.\n- ✔ Optimized for Microservices – Lightweight, fast, and built for scalable architectures.\n\n## Table of contents\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e📖 Table of Contents\u003c/b\u003e\u003c/summary\u003e\n\n- [Getting started](#getting-started)\n- [Tutorials](#tutorials)\n- [Configs](#configs)\n    - [reactify-core configs](#reactify-core-configs)\n    - [reactify-cache configs](#reactify-cache-configs)\n    - [reactify-client configs](#reactify-client-configs)\n    - [reactify-utils configs](#reactify-utils-configs)\n- [Features](#features)\n    - [Local cache](#local-cache)\n    - [Call api](#call-api)\n    - [Data utils](#data-utils)\n    - [More](#more)\n- [Project demo](#project-demo)\n- [Contributing](#contributing)\n- [Star History](#star-history)\n- [Contributors](#contributors)\n- [License](#license)\n\n\u003c/details\u003e\n\n## Getting Started\n\nAdd the dependency to your project build.gradle file or maven pom:\n\n⬇️ Download Gradle and Maven\n\n```groovy\ndependencies {\n    //Core reactive framework with Spring WebFlux integration \n    // https://mvnrepository.com/artifact/io.github.hoangtien2k3/reactify-core\n    implementation(\"io.github.hoangtien2k3:reactify-core:1.3.0\")\n\n    //In-memory reactive caching for high-speed data access\n    implementation(\"io.github.hoangtien2k3:reactify-cache:1.2.4\")\n\n    //Reactive REST/SOAP client with fault-tolerant design\n    implementation(\"io.github.hoangtien2k3:reactify-client:1.2.4\")\n\n    //Use in minio (aws s3)\n    implementation(\"io.github.hoangtien2k3:reactify-minio:1.2.5\")\n\n    //Essential utilities for reactive development\n    implementation(\"io.github.hoangtien2k3:reactify-utils:1.2.5\")\n}\n```\n\n```xml\n\u003cdependencies\u003e\n   \u003c!-- Core reactive framework with Spring WebFlux integration --\u003e\n   \u003c!-- https://mvnrepository.com/artifact/io.github.hoangtien2k3/reactify-core --\u003e\n   \u003cdependency\u003e\n      \u003cgroupId\u003eio.github.hoangtien2k3\u003c/groupId\u003e\n      \u003cartifactId\u003ereactify-core\u003c/artifactId\u003e\n      \u003cversion\u003e1.3.0\u003c/version\u003e\n   \u003c/dependency\u003e\n   \n   \u003c!-- In-memory reactive caching for high-speed data access --\u003e\n   \u003cdependency\u003e\n      \u003cgroupId\u003eio.github.hoangtien2k3\u003c/groupId\u003e\n      \u003cartifactId\u003ereactify-cache\u003c/artifactId\u003e\n      \u003cversion\u003e1.2.4\u003c/version\u003e\n   \u003c/dependency\u003e\n   \n   \u003c!-- Reactive REST/SOAP client with fault-tolerant design --\u003e\n   \u003cdependency\u003e\n      \u003cgroupId\u003eio.github.hoangtien2k3\u003c/groupId\u003e\n      \u003cartifactId\u003ereactify-client\u003c/artifactId\u003e\n      \u003cversion\u003e1.2.4\u003c/version\u003e\n   \u003c/dependency\u003e\n\n   \u003c!-- //Use in minio (aws s3) --\u003e\n   \u003cdependency\u003e\n     \u003cgroupId\u003eio.github.hoangtien2k3\u003c/groupId\u003e\n     \u003cartifactId\u003ereactify-minio\u003c/artifactId\u003e\n     \u003cversion\u003e1.2.5\u003c/version\u003e\n   \u003c/dependency\u003e\n   \n   \u003c!-- Essential utilities for reactive development --\u003e\n   \u003cdependency\u003e\n      \u003cgroupId\u003eio.github.hoangtien2k3\u003c/groupId\u003e\n      \u003cartifactId\u003ereactify-utils\u003c/artifactId\u003e\n      \u003cversion\u003e1.2.5\u003c/version\u003e\n   \u003c/dependency\u003e\n\u003c/dependencies\u003e\n```\n\n## Tutorials\n\n- Document: [https://reactify-sand.vercel.app](https://reactify-sand.vercel.app)\n\n## Configs\n\n### Reactify core configs\n\nConfig your project file `application.yml` or `application.properties`\n\n- Required security configuration `Oauth2 with Keycloak`:\n- Install keycloak and postgresql on docker [docker-compose](docker-compose.yml)\n- Next configure in the `application.yml` resource file\n\n```yml\nspring:\n  # Config OAuth2 Keycloak\n  security:\n    oauth2:\n      client:\n        provider:\n          oidc:\n            token-uri: ${keycloak.serverUrl}/realms/${keycloak.realm}/protocol/openid-connect/token\n        registration:\n          oidc:\n            client-id: ${keycloak.clientId}\n            client-secret: ${keycloak.clientSecret}\n            authorization-grant-type: ${keycloak.grantType} #password || #client_credentials\n      resourceserver:\n        jwt:\n          jwk-set-uri: ${keycloak.serverUrl}/realms/${keycloak.realm}/protocol/openid-connect/certs\n      keycloak:\n        client-id: ${keycloak.clientId}\n\n#keycloak client config\nkeycloak:\n  clientId: ezbuy-client\n  clientSecret: mI92QDfvi20tZgFtjpRAPWu8TR6eMHmw\n  realm: ezbuy-server\n  serverUrl: http://localhost:8080\n  grantType: password\n  host: localhost\n```\n\n### Reactify cache configs\n\nUse library with @LocalCache annotation\n\n```java\n@LocalCache(\n    durationInMinute = 30, //cache duration in minutes\n    maxRecord = 10000,     //maximum cache size\n    autoCache = true       //true to enable automatic caching, false otherwise\n)\n@GetMapping(\"/students\")\npublic Mono\u003cList\u003cStudent\u003e\u003e getStudents() {\n    var lstStudent = studentService.getAllStudents();\n    if (DataUtil.isNullOrEmpty(lstStudent)) {\n        return null;\n    }\n    return lstStudent;\n}\n```\n\n### Reactify client configs\n\nConfiguration in `application.yml` or `application.properties` file\n\n```yml\n# web client config\nclient:\n  #demo notification config\n  notification:\n    address: http://localhost:7878\n    name: notiServiceClient\n    pool:\n      max-size: 100\n      max-pending-acquire: 100\n    timeout:\n      read: 60000\n      write: 1000\n```\n\nUsing Rest/Soap API calls\n\n- See configuration demo in\n      client [reactify-test](https://github.com/hoangtien2k3/reactify-core/tree/main/reactify-test/src/main/java/com/reactify/test/client)\n\n### Reactify utils configs\n\nJust add `maven pom` or `build.gradle` and use the utilities available in reactify-utils\n\n## Features\n\n### Local cache\n\n```java\n@LocalCache(durationInMinute = 30, maxRecord = 10000, autoCache = true)\n@GetMapping(\"/students\")\npublic Mono\u003cList\u003cStudent\u003e\u003e getStudents() {\n    var lstStudent = studentService.getAllStudents();\n    if (DataUtil.isNullOrEmpty(lstStudent)) {\n        return null;\n    }\n    return lstStudent;\n}\n```\n\n### Call api\n\n```java\npublic Mono\u003cGeoPluginResponse\u003e getBaseCurrency(String baseCurrency) {\n    MultiValueMap\u003cString, String\u003e req = new LinkedMultiValueMap\u003c\u003e();\n    req.set(\"base_currency\", baseCurrency);\n    return baseRestClientQualifier.get(baseCurrencyClient, \"/json.gp\", null, req, GeoPluginResponse.class)\n        .flatMap(optionalResponse -\u003e optionalResponse\n            .map(Mono::just)\n            .orElseGet(Mono::empty)\n        );\n}\n```\n\n## Project demo\n\n- Project using reactify-core library can be\n  referenced: [https://github.com/hoangtien2k3/keycloak-auth-service](https://github.com/hoangtien2k3/keycloak-auth-service)\n\n## Contributing\n\n- We welcome contributions! Please check our [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n- If you would like to contribute to the development of this project, please follow our contribution guidelines.\n\n![Alt](https://repobeats.axiom.co/api/embed/31a861bf21d352264c5c122808407abafb97b0ef.svg \"Repobeats analytics image\")\n\n## Star History\n\n\u003ca href=\"https://star-history.com/#hoangtien2k3/fw-commons\u0026Timeline\"\u003e\n \u003cpicture\u003e\n   \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/svg?repos=hoangtien2k3/fw-commons\u0026type=Timeline\u0026theme=dark\" /\u003e\n   \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/svg?repos=hoangtien2k3/fw-commons\u0026type=Timeline\" /\u003e\n   \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/svg?repos=hoangtien2k3/fw-commons\u0026type=Timeline\" /\u003e\n \u003c/picture\u003e\n\u003c/a\u003e\n\n## Contributors\n\n\u003ca href=\"https://github.com/hoangtien2k3/reactify/graphs/contributors\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=hoangtien2k3/reactify\" alt=\"Contributors\" /\u003e\n\u003c/a\u003e\n\n## License\n\nThis project is licensed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0)\n\n```\nCopyright 2024-2025 the original author Hoàng Anh Tiến.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n     https://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhoangtien2k3%2Freactify-core","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhoangtien2k3%2Freactify-core","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhoangtien2k3%2Freactify-core/lists"}