Estrutura de um projeto Spring API REST
- #Spring Boot / Spring
- #Java
Quando estudamos sobre Spring framework é bem comum construirmos API REST's para consolidar os conceitos do framework, mas como é a estrutura básica de um projeto Spring Web API REST?
- Pasta "src/main/java": Contém o código-fonte Java da aplicação.
- Pacote "com.example.demo": É o pacote raiz do projeto e contém as classes principais da aplicação.
- Classe principal "DemoApplication.java": É a classe principal da aplicação e contém o método main().
- Pasta "src/main/resources": Contém os arquivos de configuração e recursos utilizados pela aplicação.
- Arquivo "application.properties": É o arquivo de propriedades da aplicação, usado para configurar as propriedades do servidor e da aplicação.
- Pasta "src/main/java/com/example/demo/controller": Contém as classes controladoras da aplicação, que são responsáveis por receber e processar as requisições REST.
- Pasta "src/main/java/com/example/demo/service": Contém as classes de serviço da aplicação, que são responsáveis por implementar a lógica de negócio da aplicação.
- Pasta "src/main/java/com/example/demo/model": Contém as classes de modelo da aplicação, que representam as entidades da aplicação.
- Pasta "src/main/java/com/example/demo/repository": Contém as interfaces de repositório da aplicação, que são responsáveis por definir as operações de persistência de dados.
- Arquivo "pom.xml": É o arquivo de configuração do Maven, que contém as dependências do projeto e outras configurações.
- Pasta "src/test/java": Contém os testes unitários da aplicação.
Essa é uma estrutura básica de um projeto Spring Web API REST, mas pode ser adaptada e estendida de acordo com as necessidades do projeto.




vc também pode ter vários aplication properties:
Cada um com suas variáveis de configuração, por exemplo no dev vc pode configurar o banco de dados em memória usando o banco de dados H2 (dependência do pom.xml). Na fase de desenvolvimento é bem mais prático usar esse bd.
Como o Spring sabe qual profile usar? Porque no arquivo application.properties vc configura o profile assim:
Na minha configuração está como uma variável e o default é test. Porque na minha configuração está como uma variável? Porque quando eu subo a aplicação para um cloud, eu defino uma variável de ambiente APP_PROFILE e lá eu atribuo o profile prod.
No diretório src/main/resources vc também pode configurar salvar um script sql, se vc chamar o script como import.sql o Spring na hora de estanciar o banco de dados vai chamar este script para popular o banco. Eu utilizo este script ao invés de ficar populando os dados via criação de objetos dentro do programa.