{"id":18378417,"url":"https://github.com/carreiras/java-spring-boot-arquitetura-hexagonal","last_synced_at":"2026-04-12T02:36:05.841Z","repository":{"id":252424125,"uuid":"840349658","full_name":"carreiras/java-spring-boot-arquitetura-hexagonal","owner":"carreiras","description":"Este é um projeto que utiliza a arquitetura hexagonal com Java e Spring Boot. O projeto também utiliza Kafka para mensageria e MongoDB para persistência de dados.","archived":false,"fork":false,"pushed_at":"2024-08-16T20:35:58.000Z","size":100,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-04T23:34:22.737Z","etag":null,"topics":["apache-kafka","java","kafkalytic","mongo-express","mongodb","openfeign","spring-boot","spring-cloud","zookeeper"],"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/carreiras.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-08-09T14:00:44.000Z","updated_at":"2025-07-03T04:10:02.000Z","dependencies_parsed_at":"2024-08-16T21:09:02.465Z","dependency_job_id":null,"html_url":"https://github.com/carreiras/java-spring-boot-arquitetura-hexagonal","commit_stats":null,"previous_names":["carreiras/spring-boot-arquitetura-hexagonal","carreiras/java-spring-boot-arquitetura-hexagonal"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/carreiras/java-spring-boot-arquitetura-hexagonal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carreiras%2Fjava-spring-boot-arquitetura-hexagonal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carreiras%2Fjava-spring-boot-arquitetura-hexagonal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carreiras%2Fjava-spring-boot-arquitetura-hexagonal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carreiras%2Fjava-spring-boot-arquitetura-hexagonal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/carreiras","download_url":"https://codeload.github.com/carreiras/java-spring-boot-arquitetura-hexagonal/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carreiras%2Fjava-spring-boot-arquitetura-hexagonal/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31702580,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-11T21:17:31.016Z","status":"online","status_checked_at":"2026-04-12T02:00:06.763Z","response_time":58,"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":["apache-kafka","java","kafkalytic","mongo-express","mongodb","openfeign","spring-boot","spring-cloud","zookeeper"],"created_at":"2024-11-06T00:33:38.904Z","updated_at":"2026-04-12T02:36:05.813Z","avatar_url":"https://github.com/carreiras.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Java Spring Boot Hexagonal Architecture\n\n![Badge](https://img.shields.io/badge/license-MIT-green?style=for-the-badge)\n\n## Sobre o projeto\n\nEste é um projeto que utiliza a arquitetura hexagonal com Java e Spring Boot. O projeto também utiliza Kafka para mensageria e MongoDB para persistência de dados.\n\n## Tecnologias Utilizadas\n\nEste projeto foi desenvolvido com as seguintes tecnologias:\n\n- [Java](https://docs.oracle.com/en/java/): Linguagem de programação utilizada para desenvolver a lógica de negócios do projeto.\n- [Spring Boot](https://spring.io/projects/spring-boot): Framework utilizado para facilitar o desenvolvimento de aplicações Java.\n- [Gradle](https://gradle.org/): Ferramenta de automação de compilação utilizada para gerenciar dependências e construir o projeto.\n- [Kafka](https://kafka.apache.org/documentation/): Sistema de mensageria utilizado para comunicação assíncrona entre diferentes partes do projeto.\n- [MongoDB](https://docs.mongodb.com/): Banco de dados NoSQL utilizado para persistência de dados.\n- [Docker](https://www.docker.com/): Plataforma utilizada para contêinerização da aplicação e suas dependências.\n\nPara mais informações sobre cada tecnologia, consulte a documentação oficial fornecida nos links acima.\n\n## Pré-requisitos\n\n- Java 11\n- Docker e Docker Compose\n- Gradle\n\n## Instalação\n\n1. Clone o repositório para o seu computador.\n2. Navegue até o diretório do projeto.\n3. Execute o comando `gradle build` para compilar o projeto.\n4. Execute o comando `docker-compose up -d` para iniciar os serviços do Kafka e MongoDB.\n\n## Uso\n\nApós a instalação, você pode iniciar a aplicação executando o comando `gradle bootRun`.\n\n## Utilizando WireMock para Simulação de Serviços\n\nEste projeto utiliza o WireMock para simular respostas de serviços externos durante o desenvolvimento e testes. O WireMock permite que você configure respostas estáticas para determinadas requisições HTTP.\n\nAqui estão alguns exemplos de como configurar o WireMock para responder a requisições GET para dois CEPs diferentes:\n\n```json\n{\n  \"request\": {\n    \"method\": \"GET\",\n    \"url\": \"/addresses/38400000\"\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"Content-Type\": \"application/json\"\n    },\n    \"jsonBody\": {\n      \"street\": \"Rua Hexagonal\",\n      \"city\": \"Uberlândia\",\n      \"state\": \"Minas Gerais\"\n    }\n  }\n}\n```\n   \n ```json\n{\n  \"request\": {\n    \"method\": \"GET\",\n    \"url\": \"/addresses/38401000\"\n  },\n  \"response\": {\n    \"status\": 200,\n    \"headers\": {\n      \"Content-Type\": \"application/json\"\n    },\n    \"jsonBody\": {\n      \"street\": \"Rua Circular\",\n      \"city\": \"Uberlândia\",\n      \"state\": \"Minas Gerais\"\n    }\n  }\n}\n```\n\n## Utilizando Postman para Testar a API\n\nEste projeto pode ser testado utilizando o Postman. \n\nAqui está a collection do Postman que pode ser utilizado para testar este projeto:\n\n```json\n{\n  \"info\": {\n    \"_postman_id\": \"8e92fdb3-7c4e-45fc-a60e-5803ccff362c\",\n    \"name\": \"java-spring-boot-arquitetura-hexagonal\",\n    \"schema\": \"https://schema.getpostman.com/json/collection/v2.1.0/collection.json\",\n    \"_exporter_id\": \"13175288\"\n  },\n  \"item\": [\n    {\n      \"name\": \"Wiremock\",\n      \"item\": [\n        {\n          \"name\": \"/addresses/38400000\",\n          \"request\": {\n            \"method\": \"GET\",\n            \"header\": [],\n            \"url\": {\n              \"raw\": \"localhost:8082/addresses/38400000\",\n              \"host\": [\n                \"localhost\"\n              ],\n              \"port\": \"8082\",\n              \"path\": [\n                \"addresses\",\n                \"38400000\"\n              ]\n            }\n          },\n          \"response\": []\n        },\n        {\n          \"name\": \"/addresses/38400001\",\n          \"request\": {\n            \"method\": \"GET\",\n            \"header\": [],\n            \"url\": {\n              \"raw\": \"localhost:8082/addresses/38400001\",\n              \"host\": [\n                \"localhost\"\n              ],\n              \"port\": \"8082\",\n              \"path\": [\n                \"addresses\",\n                \"38400001\"\n              ]\n            }\n          },\n          \"response\": []\n        }\n      ]\n    },\n    {\n      \"name\": \"Customers\",\n      \"item\": [\n        {\n          \"name\": \"/api/v1/customers\",\n          \"request\": {\n            \"method\": \"POST\",\n            \"header\": [],\n            \"body\": {\n              \"mode\": \"raw\",\n              \"raw\": \"{\\r\\n    \\\"name\\\": \\\"Bararandir\\\",\\r\\n    \\\"zipCode\\\": \\\"38400000\\\",\\r\\n    \\\"cpf\\\": \\\"11111111111\\\"\\r\\n}\",\n              \"options\": {\n                \"raw\": {\n                  \"language\": \"json\"\n                }\n              }\n            },\n            \"url\": {\n              \"raw\": \"http://localhost:8080/api/v1/customers\",\n              \"protocol\": \"http\",\n              \"host\": [\n                \"localhost\"\n              ],\n              \"port\": \"8080\",\n              \"path\": [\n                \"api\",\n                \"v1\",\n                \"customers\"\n              ]\n            }\n          },\n          \"response\": []\n        },\n        {\n          \"name\": \"/api/v1/customers/{id}\",\n          \"request\": {\n            \"method\": \"GET\",\n            \"header\": [],\n            \"url\": {\n              \"raw\": \"http://localhost:8080/api/v1/customers/66bfacc3e35a313c9a1d0b94\",\n              \"protocol\": \"http\",\n              \"host\": [\n                \"localhost\"\n              ],\n              \"port\": \"8080\",\n              \"path\": [\n                \"api\",\n                \"v1\",\n                \"customers\",\n                \"66bfacc3e35a313c9a1d0b94\"\n              ]\n            }\n          },\n          \"response\": []\n        },\n        {\n          \"name\": \"/api/v1/customers/{id}\",\n          \"request\": {\n            \"method\": \"PUT\",\n            \"header\": [],\n            \"body\": {\n              \"mode\": \"raw\",\n              \"raw\": \"{\\r\\n    \\\"name\\\": \\\"Belbeyguk\\\",\\r\\n    \\\"zipCode\\\": \\\"38400001\\\",\\r\\n    \\\"cpf\\\": \\\"11111111111\\\"\\r\\n}\",\n              \"options\": {\n                \"raw\": {\n                  \"language\": \"json\"\n                }\n              }\n            },\n            \"url\": {\n              \"raw\": \"http://localhost:8080/api/v1/customers/66bfacc3e35a313c9a1d0b94\",\n              \"protocol\": \"http\",\n              \"host\": [\n                \"localhost\"\n              ],\n              \"port\": \"8080\",\n              \"path\": [\n                \"api\",\n                \"v1\",\n                \"customers\",\n                \"66bfacc3e35a313c9a1d0b94\"\n              ]\n            }\n          },\n          \"response\": []\n        }\n      ]\n    }\n  ]\n}\n```\n\n## Produzindo Mensagens para o Kafka\n\nEste projeto utiliza um formato específico de JSON para produzir mensagens no tópico do Kafka chamado \"tp-cpf-validated\". Aqui está um exemplo do formato JSON:\n\n```json\n{\n   \"id\": \"string\",\n   \"name\": \"string\",\n   \"zipCode\": \"string\",\n   \"cpf\": \"string\",\n   \"isValidCpf\": boolean\n}\n```\nCada campo no JSON tem um propósito específico:\n\n- id: Uma string que representa o identificador único do usuário. Este é um campo obrigatório e deve ser único para cada usuário.\nname: Uma string que representa o nome do usuário. Este é um campo obrigatório.\n- zipCode: Uma string que representa o CEP do usuário. Este é um campo obrigatório.\n- cpf: Uma string que representa o CPF do usuário. Este é um campo obrigatório e deve seguir o formato padrão de CPF.\n- isValidCpf: Um valor booleano que indica se o CPF do usuário é válido ou não. Este é um campo obrigatório e deve ser true se o CPF for válido e false se não for.\n\n\n## Documentação\n\nPara mais informações, consulte a documentação oficial dos seguintes recursos utilizados neste projeto:\n\n- [Java](https://docs.oracle.com/en/java/)\n- [Spring Boot](https://spring.io/projects/spring-boot)\n- [Kafka](https://kafka.apache.org/documentation/)\n- [MongoDB](https://docs.mongodb.com/)\n\n## Licença\n\nEste projeto está licenciado sob a licença MIT.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarreiras%2Fjava-spring-boot-arquitetura-hexagonal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcarreiras%2Fjava-spring-boot-arquitetura-hexagonal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarreiras%2Fjava-spring-boot-arquitetura-hexagonal/lists"}