En esta sección, aprenderemos sobre la estructura típica de un proyecto Spring Boot. Comprender cómo se organiza un proyecto Spring Boot es crucial para desarrollar aplicaciones de manera eficiente y mantener el código limpio y manejable.
Estructura Básica del Proyecto
Cuando creas un nuevo proyecto Spring Boot, generalmente verás una estructura de directorios similar a la siguiente:
my-spring-boot-app/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── myapp/ │ │ │ ├── MySpringBootApplication.java │ │ │ ├── controller/ │ │ │ ├── service/ │ │ │ └── repository/ │ │ ├── resources/ │ │ ├── application.properties │ │ └── static/ │ │ └── templates/ │ └── test/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── myapp/ │ │ └── MySpringBootApplicationTests.java ├── .gitignore ├── mvnw ├── mvnw.cmd ├── pom.xml └── README.md
Desglose de la Estructura
-
src/main/java: Contiene el código fuente de la aplicación.
- com/example/myapp: Paquete base de la aplicación.
- MySpringBootApplication.java: Clase principal que arranca la aplicación Spring Boot.
- controller: Contiene las clases de controladores que manejan las solicitudes HTTP.
- service: Contiene las clases de servicio que implementan la lógica de negocio.
- repository: Contiene las interfaces de repositorio que interactúan con la base de datos.
- com/example/myapp: Paquete base de la aplicación.
-
src/main/resources: Contiene los recursos de la aplicación.
- application.properties: Archivo de configuración principal de Spring Boot.
- static: Contiene recursos estáticos como HTML, CSS, JavaScript, imágenes, etc.
- templates: Contiene plantillas Thymeleaf u otros motores de plantillas.
-
src/test/java: Contiene las pruebas unitarias e integradas.
- MySpringBootApplicationTests.java: Clase de prueba principal.
-
.gitignore: Archivo que especifica qué archivos y directorios deben ser ignorados por Git.
-
mvnw y mvnw.cmd: Scripts para ejecutar Maven Wrapper, que permite construir el proyecto sin necesidad de tener Maven instalado globalmente.
-
pom.xml: Archivo de configuración de Maven que define las dependencias y configuraciones del proyecto.
-
README.md: Archivo de documentación del proyecto.
Explicación Detallada
Clase Principal
package com.example.myapp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MySpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(MySpringBootApplication.class, args);
}
}- @SpringBootApplication: Esta anotación combina tres anotaciones importantes:
@Configuration,@EnableAutoConfiguration, y@ComponentScan. Marca esta clase como la clase principal de configuración y arranque de la aplicación. - main: El método principal que utiliza
SpringApplication.runpara iniciar la aplicación.
Controladores
package com.example.myapp.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, World!";
}
}- @RestController: Marca la clase como un controlador donde cada método devuelve un objeto de dominio en lugar de una vista.
- @GetMapping: Mapea las solicitudes HTTP GET a métodos específicos.
Servicios
package com.example.myapp.service;
import org.springframework.stereotype.Service;
@Service
public class HelloService {
public String getGreeting() {
return "Hello, World!";
}
}- @Service: Marca la clase como un servicio, que contiene la lógica de negocio.
Repositorios
package com.example.myapp.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.example.myapp.model.User;
public interface UserRepository extends JpaRepository<User, Long> {
}- JpaRepository: Proporciona métodos CRUD y más para la entidad
User.
application.properties
server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=secret
- server.port: Configura el puerto del servidor.
- spring.datasource.url: Configura la URL de la base de datos.
- spring.datasource.username: Configura el nombre de usuario de la base de datos.
- spring.datasource.password: Configura la contraseña de la base de datos.
Ejercicio Práctico
Ejercicio 1: Crear un Proyecto Spring Boot
-
Crear un Proyecto: Usa Spring Initializr (https://start.spring.io/) para crear un nuevo proyecto Spring Boot con las siguientes dependencias:
- Spring Web
- Spring Data JPA
- H2 Database
-
Estructura del Proyecto: Asegúrate de que la estructura del proyecto se vea como la descrita anteriormente.
-
Clase Principal: Crea la clase principal
MySpringBootApplicationen el paquetecom.example.myapp. -
Controlador: Crea un controlador
HelloControlleren el paquetecom.example.myapp.controllerque maneje una solicitud GET en la ruta/hello. -
Servicio: Crea un servicio
HelloServiceen el paquetecom.example.myapp.serviceque devuelva un saludo. -
Repositorio: Crea una interfaz
UserRepositoryen el paquetecom.example.myapp.repositoryque extiendaJpaRepository.
Solución
// MySpringBootApplication.java
package com.example.myapp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MySpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(MySpringBootApplication.class, args);
}
}// HelloController.java
package com.example.myapp.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, World!";
}
}// HelloService.java
package com.example.myapp.service;
import org.springframework.stereotype.Service;
@Service
public class HelloService {
public String getGreeting() {
return "Hello, World!";
}
}// UserRepository.java
package com.example.myapp.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.example.myapp.model.User;
public interface UserRepository extends JpaRepository<User, Long> {
}Conclusión
En esta sección, hemos explorado la estructura básica de un proyecto Spring Boot y hemos creado un proyecto simple con controladores, servicios y repositorios. Comprender esta estructura te ayudará a organizar tu código de manera eficiente y a seguir las mejores prácticas en el desarrollo de aplicaciones Spring Boot. En el próximo módulo, profundizaremos en las anotaciones de Spring Boot y cómo se utilizan para simplificar el desarrollo de aplicaciones.
Curso de Spring Boot
Módulo 1: Introducción a Spring Boot
- ¿Qué es Spring Boot?
- Configuración de tu Entorno de Desarrollo
- Creando tu Primera Aplicación Spring Boot
- Entendiendo la Estructura del Proyecto Spring Boot
Módulo 2: Conceptos Básicos de Spring Boot
- Anotaciones de Spring Boot
- Inyección de Dependencias en Spring Boot
- Configuración de Spring Boot
- Propiedades de Spring Boot
Módulo 3: Construyendo Servicios Web RESTful
- Introducción a los Servicios Web RESTful
- Creando Controladores REST
- Manejo de Métodos HTTP
- Manejo de Excepciones en REST
Módulo 4: Acceso a Datos con Spring Boot
- Introducción a Spring Data JPA
- Configuración de Fuentes de Datos
- Creación de Entidades JPA
- Uso de Repositorios de Spring Data
- Métodos de Consulta en Spring Data JPA
Módulo 5: Seguridad en Spring Boot
- Introducción a Spring Security
- Configuración de Spring Security
- Autenticación y Autorización de Usuarios
- Implementación de Autenticación JWT
Módulo 6: Pruebas en Spring Boot
- Introducción a las Pruebas
- Pruebas Unitarias con JUnit
- Pruebas de Integración
- Simulación con Mockito
Módulo 7: Funciones Avanzadas de Spring Boot
Módulo 8: Despliegue de Aplicaciones Spring Boot
Módulo 9: Rendimiento y Monitoreo
- Ajuste de Rendimiento
- Monitoreo con Spring Boot Actuator
- Uso de Prometheus y Grafana
- Gestión de Registros y Logs
