Introducción a SpringBoot 3: Configuración Automática y Desarrollo Web

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-parent define 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:

  1. Importar un starter (ej. spring-boot-starter-web).
  2. El starter incluye spring-boot-autoconfigure con clases de configuración.
  3. @EnableAutoConfiguration carga automáticamente estas clases.
  4. 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 WebMvcConfigurer para 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:

  1. DataSourceAutoConfiguration: configura el origen de datos.
  2. MybatisAutoConfiguration: configura MyBatis.
  3. 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):

  1. Argumentos de línea de comandos.
  2. Archivo externo application.properties.
  3. 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:

  1. Importar starter.
  2. Archivo META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports.
  3. Cargar clases xxxAutoConfiguration.
  4. Registrar componentes y vincular a propiedades.

2. Crear Starter Personalizado

Pasos:

  1. Crear proyecto con spring-boot-starter.
  2. Implementar lógica.
  3. Crear xxxAutoConfiguration.
  4. 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);
    }
}

Etiquetas: SpringBoot java spring-framework spring-boot-starter Autoconfiguración

Publicado el 6-18 08:25