Aplicação Spring Boot moderna com Docker, Docker Compose e PostgreSQL, demonstrando as melhores práticas de desenvolvimento Java.
- Java 17
- Spring Boot 3.2.0
- Spring Data JPA
- PostgreSQL 16
- Docker & Docker Compose
- Lombok
- Maven
- Docker (versão 20.10+)
- Docker Compose (versão 2.0+)
- Java 17+ (opcional, apenas para desenvolvimento local)
- Maven 3.9+ (opcional, apenas para desenvolvimento local)
- Clone o repositório:
cd Spring-Boot- Inicie os containers:
docker-compose up -dIsso vai:
- Construir a imagem da aplicação
- Iniciar o container PostgreSQL
- Iniciar o container Spring Boot
- Criar as tabelas automaticamente
- Verifique os logs:
docker-compose logs -f app- Acesse a aplicação:
http://localhost:8080
- Instale o PostgreSQL:
# Ubuntu/Debian
sudo apt-get install postgresql postgresql-contrib
# Criar banco de dados
sudo -u postgres psql
CREATE DATABASE springdb;- Execute a aplicação:
mvn clean package
java -jar target/spring-boot-docker-1.0.0-SNAPSHOT.jarcurl -X POST http://localhost:8080/api/produtos \
-H "Content-Type: application/json" \
-d '{
"nome": "Notebook Dell",
"preco": 3500.00,
"descricao": "Notebook Dell Inspiron",
"estoque": 10
}'curl http://localhost:8080/api/produtoscurl http://localhost:8080/api/produtos/1curl http://localhost:8080/api/produtos/buscar?nome=Dellcurl -X PUT http://localhost:8080/api/produtos/1 \
-H "Content-Type: application/json" \
-d '{
"nome": "Notebook Dell Atualizado",
"preco": 3800.00,
"descricao": "Nova descrição",
"estoque": 8
}'curl -X DELETE http://localhost:8080/api/produtos/1curl http://localhost:8080/actuator/health.
├── src/
│ └── main/
│ ├── java/com/example/springboot/
│ │ ├── SpringBootApplication.java # Classe principal
│ │ ├── controller/ # REST Controllers
│ │ │ ├── ProdutoController.java
│ │ │ └── HealthController.java
│ │ ├── service/ # Lógica de negócio
│ │ │ └── ProdutoService.java
│ │ ├── repository/ # Repositórios JPA
│ │ │ └── ProdutoRepository.java
│ │ └── model/ # Entidades
│ │ └── Produto.java
│ └── resources/
│ └── application.properties # Configurações
├── pom.xml # Dependências Maven
├── Dockerfile # Imagem Docker
├── docker-compose.yml # Orquestração
├── .dockerignore # Arquivos ignorados
├── init.sql # Script inicial BD
├── README.md # Este arquivo
└── COMO_FUNCIONA.md # Documentação detalhada
# Iniciar containers
docker-compose up -d
# Parar containers
docker-compose down
# Ver logs
docker-compose logs -f
# Rebuild forçado
docker-compose build --no-cache
docker-compose up -d
# Entrar no container do PostgreSQL
docker exec -it spring-postgres psql -U postgres -d springdb
# Ver status dos containers
docker-compose ps# Acessar PostgreSQL via Docker
docker exec -it spring-postgres psql -U postgres -d springdb
# Listar tabelas
\dt
# Ver dados da tabela produtos
SELECT * FROM produtos;
# Sair do psql
\qCrie um arquivo .env na raiz do projeto para personalizar:
DB_NAME=springdb
DB_USER=postgres
DB_PASSWORD=postgres
DB_PORT=5432
APP_PORT=8080As configurações estão em docker-compose.yml:
- Porta: 5432
- Database: springdb (padrão)
- Usuário: postgres (padrão)
- Senha: postgres (padrão)
# Ver logs do container
docker-compose logs app
# Verificar healthcheck
docker inspect spring-app | grep Health -A 10# Verificar se PostgreSQL está rodando
docker-compose ps
# Testar conexão
docker exec -it spring-postgres pg_isready# Parar e remover tudo
docker-compose down -v
# Rebuild
docker-compose build --no-cache
docker-compose up -dConsulte COMO_FUNCIONA.md para entender detalhadamente:
- Arquitetura do sistema
- Fluxo de dados
- Configurações avançadas
- Otimizações de performance
- Container executando com usuário não-root
- Network isolation entre containers
- Healthchecks configurados
- Multi-stage build para menor superfície de ataque
- Healthcheck endpoint:
GET /actuator/health - Logs SQL habilitados em desenvolvimento
- Docker stats disponível
- Fork o projeto
- Crie sua feature branch
- Commit suas mudanças
- Push para a branch
- Abra um Pull Request
Este projeto é open source e está disponível sob a licença MIT.
Para problemas ou dúvidas:
- Verifique a seção Troubleshooting
- Consulte os logs:
docker-compose logs - Verifique a documentação em
COMO_FUNCIONA.md