SpringBoot 3
Basado en Java 17, SpringBoot 3 permite una configuración rápida y el entendimiento de sus principios fundamentales. Incorpora programación reactiva de forma integral.
I. Inicio
1. Introducción
1.1 Conocimientos Previos
- Java 17
- Spring, SpringMVC, MyBatis
- Maven, IDE como IntelliJ IDEA
1.2 Requisitos del Entorno
| Herramienta | Versión Mínima |
|---|---|
| SpringBoot | 3.0.5+ |
| Java | 17+ |
| Maven | 3.5+ |
| Tomcat | 10.0+ |
1.3 ¿Qué es SpringBoot?
SpringBoot simplifica la creación de aplicaciones Spring independientes y listas para producción. La mayoría de aplicaciones requieren mínima configuración para integrar el ecosistema Spring y tecnologías de terceros.
Características clave:
- Creación rápida de aplicaciones Spring independientes.
- Servidor embebido (Tomcat, Jetty o Undertow) sin necesidad de desplegar WAR.
- Starters: dependencias preconfiguradas para escenarios comunes (web, JSON, bases de datos, etc.).
- Configuración automática: configura automáticamente Spring y bibliotecas de terceros basado en dependencias.
- Producción lista: métricas, health checks, configuración externalizada.
- Sin generación de código ni XML.
2. Experiencia Rápida
Escenario: responder "¡Hola, Spring Boot 3!" en la ruta /hello.
2.1 Flujo de Desarrollo
① Crear proeycto
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.5</version>
</parent>
② Importar starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
③ Clase principal
@SpringBootApplication
public class AppPrincipal {
public static void main(String[] args) {
SpringApplication.run(AppPrincipal.class, args);
}
}
④ Controlador
@RestController
public class SaludoController {
@GetMapping("/saludo")
public String saludo() {
return "¡Hola, Spring Boot 3!";
}
}
⑤ Empaquetar
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Empaquetar con mvn clean package y ejecutar con java -jar app.jar.
3. Aálisis de la Aplicación
3.1 Mecnaismo de Gestión de Dependencias
¿Por qué no se especifican versiones?
- El proyecto padre
spring-boot-starter-parentdefine un centro de versiones. - Para versiones personalizadas: declarar en
<properties>o en la dependencia.
3.2 Mecanismo de Configuración Automática
Flujo básico:
- Importar un starter (ej.
spring-boot-starter-web). - El starter incluye
spring-boot-autoconfigurecon clases de configuración. @EnableAutoConfigurationcarga automáticamente estas clases.- Cada clase de configuración (
xxxAutoConfiguration) define componentes y se vincula a propiedades (xxxProperties).
Ejemplo de verificación:
var contexto = SpringApplication.run(AppPrincipal.class, args);
String[] nombres = contexto.getBeanDefinitionNames();
Arrays.stream(nombres).forEach(System.out::println);
II. Desarrollo Web
1. Principios de WebMvcAutoConfiguration
1.1 Efecto Predeterminado
- Filtros:
HiddenHttpMethodFilter,FormContentFilter. - Componente
WebMvcConfigurerpara personalización.
1.2 Reglas de Recursos Estáticos
/webjars/**->classpath:/META-INF/resources/webjars//**->classpath:/META-INF/resources/,classpath:/static/, etc.
2. Motor de Plantillas
SpringBoot soporta Thymeleaf, FreeMarker, etc. Para Thymeleaf:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
Plantillas en classpath:/templates/ con extensión .html.
3. Manejo de Errores
SpringBoot proporciona un BasicErrorController que:
- Para peticiones HTML: redirige a
/error. - Para JSON: devuelve detalles del error.
3.1 Respuesta Personalizada
JSON: usar @ControllerAdvice y @ExceptionHandler.
Página: crear classpath:/templates/error/5xx.html.
III. Acceso a Datos
1. Integración con SSM
Dependencias:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
Configuración:
spring.datasource.url=jdbc:mysql://localhost:3306/mi_base
spring.datasource.username=usuario
spring.datasource.password=clave
mybatis.mapper-locations=classpath:/mapper/*.xml
2. Principio de Configuración Automática
Flujo:
DataSourceAutoConfiguration: configura el origen de datos.MybatisAutoConfiguration: configura MyBatis.- Escanea interfaces
@Mapper.
IV. Características Fundamentales
1. Perfiles (Profiles)
Aislar configuraciones por entorno:
spring.profiles.active=produccion
Archivo: application-produccion.properties.
2. Configuración Externalizada
Prioridad (de mayor a menor):
- Argumentos de línea de comandos.
- Archivo externo
application.properties. - Archivo interno
application.properties.
3. Pruebas Unitarias
Usar JUnit 5:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
Ejemplo de test:
@SpringBootTest
class MiPrueba {
@Autowired
private MiServicio servicio;
@Test
void verificarServicio() {
assertNotNull(servicio);
}
}
V. Principios Fundamentales
1. Configuración Automática
Flujo detallado:
- Importar starter.
- Archivo
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. - Cargar clases
xxxAutoConfiguration. - Registrar componentes y vincular a propiedades.
2. Crear Starter Personalizado
Pasos:
- Crear proyecto con
spring-boot-starter. - Implementar lógica.
- Crear
xxxAutoConfiguration. - Declarar en
AutoConfiguration.imports.
Ejemplo:
@Configuration
@ConditionalOnClass(MiServicio.class)
@EnableConfigurationProperties(MiProperties.class)
public class MiAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public MiServicio servicio(MiProperties properties) {
return new MiServicio(properties);
}
}