{"id":46597742,"url":"https://github.com/0nf1rey/spring-microservices-architecture","last_synced_at":"2026-03-07T15:04:12.571Z","repository":{"id":342181218,"uuid":"1173106030","full_name":"0nF1REy/spring-microservices-architecture","owner":"0nF1REy","description":"2026 | Arquitetura de microserviços com Spring Boot e Spring Cloud, incluindo API Gateway, Eureka e serviços independentes de estudantes e cursos.","archived":false,"fork":false,"pushed_at":"2026-03-05T04:26:16.000Z","size":514,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-05T09:30:51.089Z","etag":null,"topics":["api","eureka","java","microservice","spring-cloud-gateway"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/0nF1REy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-05T02:34:54.000Z","updated_at":"2026-03-05T04:31:58.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/0nF1REy/spring-microservices-architecture","commit_stats":null,"previous_names":["0nf1rey/spring-microservices-architecture"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/0nF1REy/spring-microservices-architecture","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0nF1REy%2Fspring-microservices-architecture","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0nF1REy%2Fspring-microservices-architecture/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0nF1REy%2Fspring-microservices-architecture/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0nF1REy%2Fspring-microservices-architecture/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/0nF1REy","download_url":"https://codeload.github.com/0nF1REy/spring-microservices-architecture/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0nF1REy%2Fspring-microservices-architecture/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30219328,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T14:02:48.375Z","status":"ssl_error","status_checked_at":"2026-03-07T14:02:43.192Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["api","eureka","java","microservice","spring-cloud-gateway"],"created_at":"2026-03-07T15:04:11.880Z","updated_at":"2026-03-07T15:04:12.555Z","avatar_url":"https://github.com/0nF1REy.png","language":"Java","readme":"\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./resources/images/docs/logotype/spring-microservices.png\" width=\"350\" alt=\"Logotipo — Spring Microservices\" /\u003e\n\u003c/p\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n![Maintenance](https://img.shields.io/maintenance/yes/2026?style=for-the-badge)\n![License MIT](https://img.shields.io/badge/license-MIT-blue?style=for-the-badge)\n![Status: Completed](https://img.shields.io/badge/status-completed-brightgreen?style=for-the-badge)\n\n\u003c/div\u003e\n\n## 🧭 Guia de Navegação (Índice)\n\n- **[📖 Descrição](#descricao)**\n- **[🧩 Visão geral](#visão-geral)**\n- **[🏗️ Arquitetura](#arquitetura)**\n- **[🛠️ Stack e versões](#stack-e-versões)**\n- **[📁 Estrutura dos módulos](#estrutura-dos-módulos)**\n- **[🚪 Portas e serviços](#portas-e-serviços)**\n- **[⚙️ Configuração de ambiente](#configuração-de-ambiente)**\n- **[▶️ Como executar localmente](#como-executar-localmente)**\n- **[🧭 Rotas expostas no Gateway](#rotas-expostas-no-gateway)**\n- **[🧪 Exemplos de requisição](#exemplos-de-requisição)**\n- **[✅ Build e testes](#build-e-testes)**\n- **[📌 Observações importantes](#observações-importantes)**\n- **[👤 Sobre o Desenvolvedor](#sobre-o-desenvolvedor)**\n- **[📜 Licença](#licenca)**\n\n## Student | Course\n\n## 📖 Descrição \u003ca name=\"descricao\"\u003e\u003c/a\u003e\n\nProjeto de estudo com arquitetura de microserviços usando **Spring Boot 3**, **Spring Cloud Gateway**, **OpenFeign**, **JPA** e **PostgreSQL**.\n\n## 🧩 Visão geral \u003ca name=\"visão-geral\"\u003e\u003c/a\u003e\n\nO sistema possui dois microserviços de domínio:\n\n- **courseservice**: cadastro e consulta de cursos.\n- **studentservice**: cadastro e consulta de estudantes, com integração ao serviço de cursos.\n\nTambém inclui componentes de infraestrutura:\n\n- **api_gateway**: roteamento de requisições para os serviços.\n- **eurekaserver**: servidor de service discovery.\n\n## 🏗️ Arquitetura \u003ca name=\"arquitetura\"\u003e\u003c/a\u003e\n\n```mermaid\nflowchart LR\n    Client[Cliente HTTP] --\u003e Gateway[API Gateway :8085]\n    Gateway --\u003e CourseService[courseservice :8080]\n    Gateway --\u003e StudentService[studentservice :8081]\n    StudentService --\u003e|Feign| CourseService\n    Eureka[Eureka Server :8761]\n```\n\n## 🛠️ Stack e versões \u003ca name=\"stack-e-versões\"\u003e\u003c/a\u003e\n\n- Java **21**\n- Maven (multi-módulo)\n- Spring Boot **3.2.5**\n- Spring Cloud **2023.0.1**\n- PostgreSQL\n\n## 📁 Estrutura dos módulos \u003ca name=\"estrutura-dos-módulos\"\u003e\u003c/a\u003e\n\n```text\nstud_course_microservice/\n├── pom.xml                 # POM pai (packaging pom)\n├── courseservice/          # CRUD de cursos\n├── studentservice/         # CRUD de estudantes + integração com cursos\n├── api_gateway/            # Gateway de entrada\n└── eurekaserver/           # Service discovery\n```\n\n## 🚪 Portas e serviços \u003ca name=\"portas-e-serviços\"\u003e\u003c/a\u003e\n\n- `eurekaserver`: **8761**\n- `api_gateway`: **8085**\n- `courseservice`: **8080**\n- `studentservice`: **8081**\n\n## ⚙️ Configuração de ambiente \u003ca name=\"configuração-de-ambiente\"\u003e\u003c/a\u003e\n\nOs serviços `courseservice` e `studentservice` usam variáveis de ambiente para conexão com banco.\n\nCopie os exemplos:\n\n```bash\ncp courseservice/.env.example courseservice/.env\ncp studentservice/.env.example studentservice/.env\n```\n\nDefina em cada `.env`:\n\n```dotenv\nDB_URL=jdbc:postgresql://localhost:5432/seu_banco\nDB_USERNAME=seu_usuario\nDB_PASSWORD=sua_senha\n```\n\n\u003e Observação: o projeto usa `ddl-auto: update`, então as tabelas são criadas/atualizadas automaticamente.\n\n## ▶️ Como executar localmente \u003ca name=\"como-executar-localmente\"\u003e\u003c/a\u003e\n\n### 1) Subir banco PostgreSQL\n\nGaranta que o PostgreSQL esteja ativo e acessível pelas credenciais configuradas.\n\n### 2) Iniciar os serviços (ordem sugerida)\n\nEm terminais separados, na raiz `stud_course_microservice`:\n\n```bash\nmvn -pl eurekaserver spring-boot:run\nmvn -pl courseservice spring-boot:run\nmvn -pl studentservice spring-boot:run\nmvn -pl api_gateway spring-boot:run\n```\n\n### 3) URLs úteis\n\n- Eureka dashboard: `http://localhost:8761`\n- Gateway base: `http://localhost:8085`\n\n## 🧭 Rotas expostas no Gateway \u003ca name=\"rotas-expostas-no-gateway\"\u003e\u003c/a\u003e\n\nO Gateway remove o prefixo `/api` e encaminha para os serviços internos.\n\n### Courses\n\n- `POST /api/courses`\n- `GET /api/courses`\n- `GET /api/courses/{id}`\n\n### Students\n\n- `POST /api/students`\n- `GET /api/students`\n- `GET /api/students/{id}`\n- `GET /api/students/{id}/course` (retorna estudante + dados do curso via Feign)\n\n## 🧪 Exemplos de requisição \u003ca name=\"exemplos-de-requisição\"\u003e\u003c/a\u003e\n\n### Criar curso\n\n```bash\ncurl -X POST http://localhost:8085/api/courses \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"cname\": \"Arquitetura de Microserviços\",\n    \"cdescription\": \"Conceitos e prática com Spring\"\n  }'\n```\n\n### Criar estudante\n\n```bash\ncurl -X POST http://localhost:8085/api/students \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"sname\": \"Alan\",\n    \"fees\": 1200.0,\n    \"cid\": 1\n  }'\n```\n\n### Buscar estudante com curso\n\n```bash\ncurl http://localhost:8085/api/students/1/course\n```\n\n## ✅ Build e testes \u003ca name=\"build-e-testes\"\u003e\u003c/a\u003e\n\nNa raiz do projeto:\n\n```bash\nmvn clean install\n```\n\nPara rodar testes de um módulo específico:\n\n```bash\nmvn -pl courseservice test\nmvn -pl studentservice test\n```\n\n## 📌 Observações importantes \u003ca name=\"observações-importantes\"\u003e\u003c/a\u003e\n\n- A comunicação entre `studentservice` e `courseservice` usa Feign com URL fixa (`http://localhost:8080`).\n- O Gateway está configurado com rotas estáticas para `localhost`.\n- O `eurekaserver` está disponível, mas o roteamento atual não depende de descoberta dinâmica para funcionar.\n\n## 👤 Sobre o Desenvolvedor \u003ca name=\"sobre-o-desenvolvedor\"\u003e\u003c/a\u003e\n\n\u003ctable align=\"center\"\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003cbr\u003e\n        \u003ca href=\"https://github.com/0nF1REy\" target=\"_blank\"\u003e\n          \u003cimg src=\"./resources/images/docs/developer/alan-ryan.jpg\" height=\"160\" alt=\"Foto — Alan Ryan\"\u003e\n        \u003c/a\u003e\n        \u003c/p\u003e\n        \u003ca href=\"https://github.com/0nF1REy\" target=\"_blank\"\u003e\n          \u003cstrong\u003eAlan Ryan\u003c/strong\u003e\n        \u003c/a\u003e\n        \u003c/p\u003e\n        ☕ Peopleware | Tech Enthusiast | Code Slinger ☕\n        \u003cbr\u003e\n        Apaixonado por código limpo, arquitetura escalável e experiências digitais envolventes\n        \u003c/p\u003e\n          Conecte-se comigo:\n        \u003c/p\u003e\n        \u003ca href=\"https://www.linkedin.com/in/alan-ryan-b115ba228\" target=\"_blank\"\u003e\n          \u003cimg src=\"https://img.shields.io/badge/LinkedIn-Alan_Ryan-0077B5?style=flat\u0026logo=linkedin\" alt=\"LinkedIn\"\u003e\n        \u003c/a\u003e\n        \u003ca href=\"https://gitlab.com/alanryan619\" target=\"_blank\"\u003e\n          \u003cimg src=\"https://img.shields.io/badge/GitLab-@0nF1REy-FCA121?style=flat\u0026logo=gitlab\" alt=\"GitLab\"\u003e\n        \u003c/a\u003e\n        \u003ca href=\"mailto:alanryan619@gmail.com\" target=\"_blank\"\u003e\n          \u003cimg src=\"https://img.shields.io/badge/Email-alanryan619@gmail.com-D14836?style=flat\u0026logo=gmail\" alt=\"Email\"\u003e\n        \u003c/a\u003e\n        \u003c/p\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c/div\u003e\n\n---\n\n## 📜 Licença \u003ca name=\"licenca\"\u003e\u003c/a\u003e\n\nEste projeto está sob a **licença MIT**. Consulte o arquivo **[LICENSE](LICENSE)** para obter mais detalhes.\n\n\u003e ℹ️ **Aviso de Licença:** \u0026copy; 2026 Alan Ryan da Silva Domingues. Este projeto está licenciado sob os termos da licença MIT. Isso significa que você pode usá-lo, copiá-lo, modificá-lo e distribuí-lo com liberdade, desde que mantenha os avisos de copyright.\n\n⭐ Se este repositório foi útil para você, considere dar uma estrela!\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0nf1rey%2Fspring-microservices-architecture","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F0nf1rey%2Fspring-microservices-architecture","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0nf1rey%2Fspring-microservices-architecture/lists"}