Projeto para cadastro de ex-alunos da República, utilizando Spring Boot, banco de dados H2 para testes, e PostgreSQL para produção. Este projeto implementa uma API REST com CRUD básico para gerenciar informações de ex-alunos.
- Configuração do Spring Initializr
- Configuração do Maven
- Conexão com Git
- Configuração de Perfis
- Modelagem da Entidade
- Banco de Dados e Seeds
- Arquitetura e Camadas
- Testando a API
- Preparando o Ambiente com Docker
- Possíveis Melhorias Futuras
- Acesse Spring Initializr.
- Configure o projeto com os seguintes detalhes:
- Tipo: Maven Project
- Linguagem: Java
- Versão do Spring Boot: 3.4.2
- Grupo:
com.lucassena
- Artifact:
exaluno
- Nome:
ExAluno
- Descrição: Projeto para os cadastros de ex-alunos da República
- Dependências:
- Spring Web
- Spring Data JPA
- H2 Database
- PostgreSQL Driver
- Clique em "Generate" para baixar o projeto. Extraia o arquivo gerado e abra na sua IDE preferida (Eclipse, IntelliJ, ou outra).
Nota: Você pode acessar diretamente a configuração com o seguinte link: Spring Initializr - ExAluno.
Para evitar incompatibilidades no Maven, adicione o seguinte plug-in no arquivo pom.xml
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
</plugin>
Esse plug-in garante que os recursos serão processados corretamente durante o build.
- Crie um repositório no GitHub com o nome
ExAluno
. - Inicialize o repositório localmente e conecte-o ao repositório remoto:
git init git remote add origin <url-do-repositorio> git add . git commit -m "Inicialização do projeto ExAluno" git push -u origin main
- Certifique-se de criar um
.gitignore
para ignorar arquivos desnecessários, como os da pastatarget/
:target/ *.log *.iml .idea/ .classpath .project .settings/
A aplicação suporta diferentes perfis para ambientes de desenvolvimento, teste e produção. As configurações são gerenciadas em arquivos application-{profile}.properties
.
Configure o perfil padrão e algumas variáveis genéricas:
spring.application.name=exaluno
spring.profiles.active=${APP_PROFILE:test}
spring.jpa.open-in-view=false
cors.origins=${CORS_ORIGINS:http://localhost:5173,http://localhost:3000}
Configuração para testes locais com H2:
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
Configuração para ambiente de desenvolvimento com PostgreSQL:
spring.jpa.properties.jakarta.persistence.schema-generation.create-source=metadata
spring.jpa.properties.jakarta.persistence.schema-generation.scripts.action=create
spring.jpa.properties.jakarta.persistence.schema-generation.scripts.create-target=create.sql
spring.jpa.properties.hibernate.hbm2ddl.delimiter=;
spring.datasource.url=jdbc:postgresql://localhost:5433/exaluno
spring.datasource.username=postgres
spring.datasource.password=1234567
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=none
Configuração para ambiente de produção:
spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=none
Adicione na raiz do projeto para compatibilidade com algumas plataformas de deploy:
java.runtime.version=21
A entidade ExAluno
representa os ex-alunos no sistema. O código abaixo define a estrutura da entidade:
@Entity
@Table(name = "tb_exaluno")
public class Exaluno {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Integer nunQuadro;
private Integer anoFormatura;
private String nome;
private String apelido;
private String curso;
private String cidade;
private String estado;
private String cep;
private String telefone;
private String eMail;
private String empresaTrabalha;
private String ultimaAtualizacao;
// Getters e Setters
}
O arquivo import.sql
é utilizado para popular o banco de dados H2 com dados iniciais:
INSERT INTO tb_exaluno (nun_quadro, ano_formatura, nome, apelido, curso, cidade, estado, cep, telefone, e_mail, empresa_trabalha, ultima_atualizacao)
VALUES (1, 2010, 'Lucas Silva', 'Lu', 'Engenharia', 'São Paulo', 'SP', '01000-000', '(11) 99999-9999', '[email protected]', 'Empresa A', '2025-01-01');
Execute a aplicação e acesse o console H2 em http://localhost:8080/h2-console
.
Segue a arquitetura em camadas para organização do código:
Local: src/main/java/com/lucassena/cadastro/dto/ExalunoMinDTO.java
public class ExalunoMinDTO {
private Long id;
private String nome;
private String curso;
public ExalunoMinDTO(Exaluno entity) {
this.id = entity.getId();
this.nome = entity.getNome();
this.curso = entity.getCurso();
}
}
Local: src/main/java/com/lucassena/cadastro/repositories/ExalunoRepository.java
public interface ExalunoRepository extends JpaRepository<Exaluno, Long> {
}
Local: src/main/java/com/lucassena/cadastro/services/ExalunoService.java
@Service
public class ExalunoService {
@Autowired
private ExalunoRepository repository;
public List<ExalunoMinDTO> findAll() {
return repository.findAll().stream()
.map(ExalunoMinDTO::new)
.collect(Collectors.toList());
}
}
Local: src/main/java/com/lucassena/cadastro/controllers/ExalunoController.java
@RestController
@RequestMapping("/exaluno")
public class ExalunoController {
@Autowired
private ExalunoService service;
@GetMapping
public List<ExalunoMinDTO> findAll() {
return service.findAll();
}
}
- Inicie o Docker Desktop e certifique-se de que está funcionando.
- Suba o container usando o
docker-compose.yml
:- Navegue até a pasta do arquivo:
cd "C:\Users\temaj\Desktop\lucas\projetos java\ZZdocker compose"
- Execute o comando:
docker-compose up -d
- Navegue até a pasta do arquivo:
- Acesse o pgAdmin em
http://localhost:5050/
.
Configurações detalhadas nos arquivos application-dev.properties
e application-prod.properties
estão descritas acima. Certifique-se de:
- Criar o banco de dados
exaluno
no pgAdmin. - Rodar o script gerado pelo
create.sql
no ambiente desejado.
Use o Postman ou outra ferramenta para testar os endpoints.
- Endpoint para buscar todos os ex-alunos:
- Método:
GET
- URL:
http://localhost:8080/exaluno
- Método: