{"id":22697784,"url":"https://github.com/vishwajeet-29-pro/spring-boot-box","last_synced_at":"2025-04-13T04:50:18.685Z","repository":{"id":263529200,"uuid":"890397242","full_name":"Vishwajeet-29-pro/Spring-boot-box","owner":"Vishwajeet-29-pro","description":"Central Repository for Spring Boot projects","archived":false,"fork":false,"pushed_at":"2025-04-05T05:03:02.000Z","size":634,"stargazers_count":2,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"trunk","last_synced_at":"2025-04-05T05:28:32.285Z","etag":null,"topics":["flyway-migrations","h2-database","java","jpa-hibernate","mysql","postgresql","r2dbc","reactive-webflux","spring-boot","spring-webflux","swagger-ui","webflux-test"],"latest_commit_sha":null,"homepage":"https://vishwajeet-29-pro.github.io/Spring-boot-box/","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/Vishwajeet-29-pro.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,"publiccode":null,"codemeta":null}},"created_at":"2024-11-18T13:55:13.000Z","updated_at":"2025-04-05T05:02:26.000Z","dependencies_parsed_at":"2024-12-03T17:32:04.428Z","dependency_job_id":"4b8694be-de69-4d14-9484-2297d1b3c049","html_url":"https://github.com/Vishwajeet-29-pro/Spring-boot-box","commit_stats":null,"previous_names":["vishwajeet-29-pro/spring-boot-box"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vishwajeet-29-pro%2FSpring-boot-box","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vishwajeet-29-pro%2FSpring-boot-box/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vishwajeet-29-pro%2FSpring-boot-box/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vishwajeet-29-pro%2FSpring-boot-box/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Vishwajeet-29-pro","download_url":"https://codeload.github.com/Vishwajeet-29-pro/Spring-boot-box/tar.gz/refs/heads/trunk","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248665757,"owners_count":21142123,"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":["flyway-migrations","h2-database","java","jpa-hibernate","mysql","postgresql","r2dbc","reactive-webflux","spring-boot","spring-webflux","swagger-ui","webflux-test"],"created_at":"2024-12-10T05:15:29.550Z","updated_at":"2025-04-13T04:50:18.679Z","avatar_url":"https://github.com/Vishwajeet-29-pro.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Spring Boot Box\n\nA **modular Spring Boot project** designed to explore, implement, and master various functionalities and database integrations. Each module is self-contained and focuses on a specific feature, built with **Test-Driven Development (TDD)** at its core. This project serves as a learning and demonstration platform for best practices in Spring Boot development.\n\n---\n\n## Project Structure\n\n```graphql\nspring-boot-box/\n├── settings.gradle.kts          # Gradle settings for module management\n├── Makefile                     # Build, test, and run commands using Makefile\n├── gradlew                      # Gradle wrapper script\n├── gradlew.bat                  # Gradle wrapper for Windows\n├── build.gradle.kts             # Root Gradle configuration\n├── README.md                    # Project documentation\n├── app-db-h2-connection/            # Module for H2 database integration\n├── app-db-postgres-connection/      # Module for PostgreSQL integration\n├── app-db-mysql-connection/         # Module for MySQL integration\n├── app-db-mongo-connection/         # Module for MongoDB integration\n├── app-spring-security-basic        # Module for Spring security (RBAC)\n├── app-reactive-webflux-basic       # Module for Spring Reactive webflux basic\n├── app-(future modules...)          # Additional modules for extended functionalities\n```\n\n---\n\n## Purpose and Philosophy\n\n### Key Goals:\n\n1. **Modular Design**:\n    - Each module is independent and focuses on a specific feature or database.\n    - Enables easy experimentation and integration of new ideas.\n2. **TDD-Driven Development**:\n    - Writing tests first to drive the implementation.\n    - Ensures reliable, maintainable, and bug-free code.\n3. **Learning-Focused**:\n    - A sandbox for learning Spring Boot features, database integrations, and advanced concepts.\n\n---\n## Makefile Integration\nThis project uses a Makefile to simplify build, test, run, and other operations. The Makefile provides a consistent interface for managing project tasks across different environments. For Windows users, you can install `make` using [Chocolatey](https://docs.chocolatey.org/en-us/choco/setup/#install-with-cmdexe) by running the following command:\n```bash\nchoco install make\n```\n\n## Current Modules\n\n### **1. app-db-h2-connection**\n\n- **Purpose**: Demonstrates integration with H2, an in-memory database.\n- **Features**:\n    - Quick prototyping and testing with in-memory persistence.\n    - RESTful APIs for CRUD operations.\n    - End-to-end tests for each feature.\n    - In the same project **Introduced Behavior-Driven Development (BDD) using Cucumber.** (TODO service)\n\n### **2. app-db-postgres-connection**\n\n- **Purpose**: Demonstrates integration with PostgreSQL.\n- **Features**:\n    - Production-grade persistence with PostgreSQL.\n    - Proper connection pooling and configuration.\n    - RESTful APIs and corresponding test cases.\n\n### **3. app-db-mysql-connection**\n\n- **Purpose**: Demonstrates integration with MySQL.\n- **Features**:\n    - Full MySQL database support for production use.\n    - Comprehensive CRUD APIs.\n    - Extensive testing for all operations.\n \n### **4. app-db-mongodb-connection**\n\n- **Purpose**: Demonstrates integration with MongoDB, a NoSQL database.\n- **Features**:\n    - Flexible schema design for NoSQL use cases.\n    - RESTful APIs for CRUD operations.\n    - Comprehensive test cases to ensure functionality.\n    - Suitable for projects requiring horizontal scalability.\n\n### **5. app-spring-security-basic**\n\n- **Purpose**: Kick-start with Spring security (1.0).\n- **Features**: \n  - A simple application with handle the Role based Access Control.\n  - Created RESTful APIs with Role based authorization.\n  - Created test to handle Role based authorization.\n\n### **6. app-reactive-webflux-basic**\n\n- **Purpose**: Kick-start with Spring Reactive Webflux.\n- **Features**:\n    - A simple application with handle the Tasks (same as todo application).\n    - Created RESTful APIs with help of Reactive Components such as Mono, Flux.\n    - Created test to handle CRUD operations.\n\n---\n\n## Future Plans\n\n### Planned Modules:\n\n1. **Spring Security Integration 2.0**:\n    - Implement basic authentication and authorization.\n    - Secure endpoints using Spring Security features.\n2. **Reactive Programming with WebFlux 2.0**:\n    - Add R2DBC for reactive database operations with other databases and with increase level complexity.\n3. **Advanced Functionalities**:\n    - Explore Spring Cloud for microservices.\n    - Build inter-service communication and monitoring.\n\n### Testing Enhancements:\n\n- Add mutation testing with PIT (Pitest).\n- Focus on integrating test automation pipelines.\n\n---\n\n## Getting Started\n\n### Prerequisites\n\n- **Java 17+** (or preferred version).\n- **Gradle** (build tool).\n\n### Using the Makefile\n1. Build and Test All Modules:\n```bash\n    make all\n```\n2. Build Modules:\n```bash\n    make\n```\n3. Clean All Build Files:\n```bash\n    make clean\n```\n4. Run the Root Spring Boot Application: (by default it runs h2 application)\n```bash\n    make run\n```\n5. Run the Specific Application: (e.g. h2 application)\n```bash\n    make run-h2\n```\n6. Build and Test a Specific Module:\n```bash\n    make run-module\n```\n7. Testing\nRun all tests for the module:\n```\n    make test\n```\n8. Help\n```bash\n    make help\n```\n---\n\n## OpenAPI Integration\n\nThe project leverages **OpenAPI** to provide interactive API documentation. This makes it easy to explore and test the REST APIs for each module.\n\n### How to Access OpenAPI Documentation:\n\n1. Start the Spring Boot application.\n2. Navigate to the following URL in your browser\n    ```bash\n        http://localhost:8080/swagger-ui/index.html\n    ```\n   - Replace `8080` with the appropriate port if a different one is configured.\n3. Explore the API endpoints, input parameters, and responses in an interactive interface.\n\n**Note:** In Case of **Reactive WebFlux projects** navigate to below URL:\n```bash\n    http://localhost:8080/swagger-ui.html\n```\n## Contributions\n\nContributions are welcome! Feel free to fork the repository, create a new module, or enhance the existing ones.\n-  [View Repository on GitHub](https://github.com/vishwajeet-29-pro/spring-boot-box)\n---\n\n## Author\n\n**Vishwajeet Kotkar**\n\n- A passionate developer focused on mastering Spring Boot, Test-Driven Development, and modern software practices.\n\nConnect on [LinkedIn](https://www.linkedin.com/in/vishwajeet-kotkar/) or explore my other projects on [GitHub](https://github.com/vishwajeet-29-pro).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvishwajeet-29-pro%2Fspring-boot-box","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvishwajeet-29-pro%2Fspring-boot-box","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvishwajeet-29-pro%2Fspring-boot-box/lists"}