Sistema desenvolvido utilizando Spring Boot, Spring Cloud, Netflix Eureka e Spring Cloud Gateway, seguindo uma arquitetura moderna baseada em microserviços.
O Finanças Microservices é uma aplicação de gestão financeira pessoal desenvolvida com uma arquitetura baseada em microserviços independentes.
O projeto foi estruturado para demonstrar conceitos fundamentais de sistemas distribuídos, como:
- Separação de responsabilidades
- Service Discovery
- API Gateway
- Autenticação centralizada
- Comunicação entre serviços
- Persistência independente
- Segurança baseada em JWT
- Containerização com Docker
Cada serviço possui uma responsabilidade específica e pode ser executado, escalado e evoluído de forma independente.
┌──────────────────────┐
│ API Gateway │
│ Porta 8080 │
└──────────┬───────────┘
│
┌────────────────────────────┼────────────────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌──────────────────┐ ┌────────────────┐
│ Auth Service │ │ Transaction │ │ Report Service │
│ Porta 8081 │ │ Service │ │ Porta 8083 │
│ │ │ Porta 8082 │ │ │
└───────────────┘ └──────────────────┘ └────────────────┘
│ │ │
└────────────────────────────┼────────────────────────────┘
│
▼
┌──────────────────────┐
│ Service Registry │
│ Netflix Eureka 8761 │
└──────────────────────┘
│
▼
┌──────────────────────┐
│ PostgreSQL │
└──────────────────────┘
Cliente
│
▼
API Gateway
│
├──► Auth Service
│
├──► Transaction Service
│
└──► Report Service
│
▼
PostgreSQL
O Netflix Eureka atua como Service Registry, permitindo que os microserviços sejam registrados e descobertos dinamicamente.
| Serviço | Porta | Responsabilidade |
|---|---|---|
| 🌐 API Gateway | 8080 | Entrada da aplicação, roteamento e autenticação |
| 🔐 Auth Service | 8081 | Cadastro, login e autenticação |
| 💳 Transaction Service | 8082 | Receitas, despesas e movimentações financeiras |
| 📊 Report Service | 8083 | Relatórios e indicadores financeiros |
| 📡 Service Registry | 8761 | Registro e descoberta dos serviços |
- Java 17
- Spring Boot 3.1.5
- Spring Cloud
- Spring Cloud Gateway
- Netflix Eureka
- Spring Security
- JWT
- Spring Data JPA
- Hibernate
- Maven
- PostgreSQL 16
- Docker
- Docker Compose
financas-microservicos/
│
├── api-gateway/
├── service-registry/
├── auth-service/
├── transaction-service/
├── report-service/
│
├── docker-compose.yml
├── start-all.ps1
├── start-all.sh
└── README.md
| Projeto | Responsabilidade |
|---|---|
api-gateway |
Gateway de entrada e roteamento |
service-registry |
Registro e descoberta dos microserviços |
auth-service |
Autenticação, usuários e geração de tokens |
transaction-service |
Gerenciamento de receitas e despesas |
report-service |
Relatórios e indicadores financeiros |
docker-compose.yml |
Infraestrutura de banco e containers |
start-all.ps1 |
Inicialização automatizada no Windows |
start-all.sh |
Inicialização automatizada no Linux |
Antes de iniciar o projeto, certifique-se de possuir:
- Java 17+
- Maven 3.9+
- Docker
- Docker Compose
- Git
git clone https://github.com/adanwilliamdev/financas-microservicos.git
cd financas-microservicosExecute:
docker compose up -dVerifique os containers:
docker compose psExecute na raiz do projeto:
mvn clean install -DskipTests.\start-all.ps1./start-all.shOs serviços serão iniciados de acordo com suas respectivas portas.
Após iniciar a aplicação, os serviços estarão disponíveis em:
| Aplicação | URL |
|---|---|
| 📡 Eureka Dashboard | http://localhost:8761 |
| 🌐 API Gateway | http://localhost:8080 |
| 🔐 Auth Service | http://localhost:8081 |
| 💳 Transaction Service | http://localhost:8082 |
| 📊 Report Service | http://localhost:8083 |
O ponto de entrada recomendado para os clientes da aplicação é o API Gateway, disponível na porta 8080.
O projeto possui usuários de demonstração para facilitar os testes:
| Usuário | Senha |
|---|---|
admin@financas.com |
admin123 |
usuario@financas.com |
usuario123 |
Importante: essas credenciais são destinadas apenas ao ambiente de desenvolvimento e demonstração. Não utilize essas senhas em produção.
| Método | Endpoint | Descrição |
|---|---|---|
GET |
/api/auth/health |
Verifica o status do serviço |
POST |
/api/auth/register |
Cadastra um usuário |
POST |
/api/auth/login |
Realiza autenticação |
POST /api/auth/login
Content-Type: application/json{
"email": "usuario@financas.com",
"password": "usuario123"
}| Método | Endpoint | Descrição |
|---|---|---|
GET |
/api/transacoes |
Lista transações |
POST |
/api/transacoes |
Cria uma transação |
GET |
/api/transacoes/saldo |
Consulta o saldo |
| Método | Endpoint | Descrição |
|---|---|---|
GET |
/api/relatorios/resumo |
Resumo financeiro |
GET |
/api/relatorios/categorias |
Indicadores por categoria |
A aplicação utiliza mecanismos de segurança baseados no Spring Security e JWT.
- 🔑 Autenticação baseada em JWT
- 🛡️ Spring Security
- 🌐 API Gateway
- 🔒 Validação de tokens
- 🔐 Senhas protegidas com BCrypt
- 🚪 Controle de acesso às APIs
┌──────────────┐
│ Cliente │
└──────┬───────┘
│
│ Login
▼
┌──────────────┐
│ Auth Service │
└──────┬───────┘
│
│ JWT
▼
┌──────────────┐
│ Cliente │
└──────┬───────┘
│
│ Authorization: Bearer <token>
▼
┌──────────────┐
│ API Gateway │
└──────┬───────┘
│
▼
┌───────────────────────┐
│ Microserviço destino │
└───────────────────────┘
docker compose up -ddocker compose downdocker compose logs -fdocker compose psCada microserviço possui seu próprio projeto Spring Boot e pode ser desenvolvido de forma independente.
Para executar um serviço individualmente:
cd auth-service
mvn spring-boot:runO mesmo padrão pode ser utilizado para os demais serviços:
api-gateway
service-registry
transaction-service
report-service
- Service Registry
- API Gateway
- Auth Service
- Transaction Service
- Report Service
- Config Server
- RabbitMQ
- OpenFeign
- Zipkin
- Prometheus
- Grafana
- Kubernetes
- Centralização de logs
- Resilience4j
- Testes de integração
- CI/CD
O projeto foi desenvolvido para demonstrar conhecimentos práticos em:
- Arquitetura de microserviços
- Spring Boot
- Spring Cloud
- Service Discovery
- API Gateway
- Spring Security
- JWT
- Persistência com JPA/Hibernate
- PostgreSQL
- Docker
- Docker Compose
- Maven
- Arquitetura distribuída
- Separação de responsabilidades
- Segurança de APIs
Contribuições são bem-vindas.
git checkout -b feature/minha-featuregit add .
git commit -m "feat: adiciona nova funcionalidade"git push origin feature/minha-featureEste projeto está licenciado sob a licença MIT.