Projeto base para microserviço de produtos, pronto para integração em arquitetura de microserviços com Java Spring Boot, MySQL, Redis e Kafka.
API de produtos construída com Spring Boot, conectada a MySQL, Redis e Kafka, pronta para ser usada como microserviço em uma arquitetura maior. Permite cadastro, consulta, associação com usuários externos, cache de usuários, mensageria e tratamento robusto de erros.
- Java 17+
- Spring Boot 3.5
- Spring Data JPA (MySQL)
- Spring Data Redis
- Spring Kafka
- Resilience4j (circuit breaker)
- Docker Compose (MySQL, Redis, Kafka, Zookeeper)
- Maven
- Java 17 ou superior
- Maven
- Docker e Docker Compose
Execute no terminal:
docker-compose up -dIsso irá subir:
- Redis (localhost:6379)
- Kafka (localhost:9092)
- Zookeeper (localhost:2181)
Configure o MySQL conforme seu ambiente (ou use o Docker também):
docker run --name meu-mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=productservicedb -p 3306:3306 -d mysql:8.0O arquivo src/main/resources/application.properties já está preparado para variáveis de ambiente:
spring.datasource.url=${MYSQL_URL:jdbc:mysql://127.0.0.1:3306/productservicedb?createDatabaseIfNotExist=true}
spring.datasource.username=${MYSQL_USER:root}
spring.datasource.password=${MYSQL_PASSWORD:root}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.initialization-mode=always
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
user.api.url=${USER_API_URL:http://localhost:8080}
spring.redis.host=${REDIS_HOST:localhost}
spring.redis.port=${REDIS_PORT:6379}- Clone o repositório
- Suba o MySQL, Redis, Kafka e Zookeeper (veja acima)
- Execute:
./mvnw spring-boot:run
O arquivo src/main/resources/data.sql insere produtos automaticamente ao iniciar o app:
INSERT INTO product (name, description, price, quantity, user_id) VALUES ('iPhone 15', 'Apple iPhone 15, 128GB, Preto', 6999.00, 50, 1);
INSERT INTO product (name, description, price, quantity, user_id) VALUES ('Samsung Galaxy S24', 'Samsung Galaxy S24, 256GB, Prata', 5999.00, 40, 2);
-- ...src/main/java/com/microservicos/ProductServiceAPI/
controllers/
dtos/
errors/
models/
repositories/
services/
src/main/resources/
application.properties
data.sql
GET /products— Lista todos os produtos (com dados do usuário associado)POST /products— Cria um novo produto- Body:
{ "name": "Produto XPTO", "description": "Descrição do produto XPTO", "price": 149.99, "quantity": 10, "userId": 1 }
- Body:
POST /products/with-user— Cria usuário e produto juntos- Body:
{ "name": "iPhone 15", "description": "Apple iPhone 15, 128GB, Preto", "price": 6999.00, "quantity": 10, "userName": "João Silva", "userEmail": "joao@email.com" }
- Body:
- Producer pronto para enviar
ProductUserDTOcomo JSON para o tópicoproduct-user-topic. - Exemplo de uso:
@Autowired private ProducerKafkaMessage producerKafkaMessage; producerKafkaMessage.sendProductUser(productUserDTO);
Todas as respostas de erro seguem o padrão:
{
"message": "Mensagem de erro detalhada"
}- O serviço de usuários deve estar rodando e acessível na URL configurada.
- O Redis é usado para cache de usuários e resiliência.
- O Kafka está pronto para uso como fila de eventos de produto/usuário.
- Validações de campos são automáticas e retornam erro 400 com mensagem clara.
- O projeto já está pronto para ser expandido com consumers Kafka, autenticação, etc.
Desenvolvido para fins didáticos e demonstração de arquitetura de microserviços.
