Esta sección proporciona más detalles sobre cómo utilizar Spring Boot. Cubre temas como sistemas de compilación, configuración automática y ejecución de aplicaciones. También veremos algunas de las mejores prácticas para trabajar con Spring Boot. Si bien Spring Boot no tiene nada de especial (es solo otra biblioteca que puede usar), existen algunas prácticas recomendadas que pueden facilitar un poco el proceso de desarrollo.

Construir sistemas

Es Se recomienda encarecidamente que elija un sistema de compilación que admita la gestión de dependencias y que pueda consumir artefactos publicados en el repositorio "Maven Central". Recomendamos elegir Maven o Gradle. Es posible hacer que Spring Boot funcione con otros sistemas de compilación (como Ant), pero no cuentan con un soporte particularmente bueno.

Gestión de dependencias

Cada versión de Spring Boot proporciona una lista de dependencias admitidas. En la práctica, no es necesario especificar la versión de ninguna de estas dependencias en la configuración de compilación, ya que Spring Boot lo hará por usted. Si actualiza Spring Boot, estas dependencias también se actualizarán de manera consistente.

Aún puede especificar una versión y anular los valores recomendados. para Spring Boot, si lo necesita.

Esta lista cuidadosamente seleccionada contiene todos los módulos Spring que se pueden usar con Spring Boot, así como una lista refinada de bibliotecas de terceros. Esta lista está disponible como un paquete de contenido estándar (spring-boot-dependencies) que se puede usar tanto con Maven como con Gradle.

Cada versión de Spring Boot incluye una versión base de Spring Framework. Le recomendamos enfáticamente que no especifique su versión.

Maven

Para obtener información sobre el uso de Spring Boot con Maven, consulte el complemento Spring Boot para obtener más información. Documentación de Maven:

Gradle

Para obtener información sobre el uso de Spring Boot con Gradle, consulte la documentación del complemento Spring Boot para Gradle:

Ant

Puedes construir un proyecto en Spring Boot usando Apache Ant+Ivy. También hay un módulo "AntLib" spring-boot-antlib, que está diseñado para ayudar a Ant a crear archivos jar ejecutables.

Para declarar dependencias, un archivo típico es ivy.xml se parece al siguiente ejemplo:

 <ivy-module version="2.0">
    <info organisation="org.springframework.boot" module="spring-boot-sample-ant" />
    <configurations>
        <conf name="compile" description="everything needed to compile this module" />
        <conf name="runtime" extends="compile" description="everything needed to run this module" />
    </configurations>
    <dependencies>
        <dependency org="org.springframework.boot" name="spring-boot-starter"
                    rev="${spring-boot.version}" conf="compile" />
    </dependencies>
</ivy-module>
        

Un build.xml típico tiene este aspecto:


<project
        xmlns:ivy="antlib:org.apache.ivy.ant"
        xmlns:spring-boot="antlib:org.springframework.boot.ant"
        name="myapp" default="build">
    <property name="spring-boot.version" value="2.7.5" />
    <target name="resolve" description="--> retrieve dependencies with ivy">
        <ivy:retrieve pattern="lib/[conf]/[artifact]-[type]-[revision].[ext]" />
    </target>
    <target name="classpaths" depends="resolve">
        <path id="compile.classpath">
            <fileset dir="lib/compile" includes="*.jar" />
        </path>
    </target>
    <target name="init" depends="classpaths">
        <mkdir dir="build/classes" />
    </target>
    <target name="compile" depends="init" description="compile">
        <javac srcdir="src/main/java" destdir="build/classes" classpathref="compile.classpath" />
    </target>
    <target name="build" depends="compile">
        <spring-boot:exejar destfile="build/myapp.jar" classes="build/classes">
            <spring-boot:lib>
                <fileset dir="lib/runtime" />
            </spring-boot:lib>
        </spring-boot:exejar>
    </target>
</project>>

Paquetes de inicio

Los paquetes de inicio son un conjunto de descriptores de dependencia convenientes que puede incluir en su aplicación. Obtiene una ventanilla única para todas las tecnologías Spring y relacionadas que necesita, sin tener que buscar en ejemplos de código y copiar y pegar un montón de descriptores de dependencia. Por ejemplo, si desea comenzar a usar Spring y JPA para acceder a la base de datos, incluya la dependencia spring-boot-starter-data-jpa en su proyecto.

Los paquetes iniciales contienen muchos dependencias necesarias para que su proyecto esté en funcionamiento rápidamente con un conjunto consistente y compatible de dependencias de transición manejables.

¿Qué significa el nombre?

Todos los paquetes de inicio oficiales tienen el mismo nombre: spring-boot-starter-*, donde * es un tipo específico de aplicación. Esta estructura de nombres está destinada a ayudarle si necesita encontrar un paquete inicial. La integración de Maven en muchos IDE le permite buscar dependencias por nombre. Por ejemplo, si tiene instalado el complemento apropiado para Eclipse o Spring Tools, puede presionar ctrl-space en el editor POM y escribir "spring-boot-starter" para obtener la lista completa.

Los paquetes de inicio de terceros no deben comenzar con spring-boot, ya que este nombre está reservado para los artefactos oficiales de Spring Boot. Más bien, un paquete inicial de terceros suele comenzar con el nombre del proyecto. Por ejemplo, un proyecto inicial de terceros llamado thirdpartyproject generalmente se llama thirdpartyproject-spring-boot-starter.

Los siguientes paquetes de inicio para aplicaciones, Spring Boot, se proporcionan dentro del grupo org.springframework.boot:

Tabla 1. Paquetes de inicio para aplicaciones Spring Boot
Nombre Descripción

spring-boot-starter

Paquete de inicio básico, que incluye soporte para configuración automática, registro y YAML

spring-boot-starter-activemq

Paquete de inicio para mensajería JMS usando Apache ActiveMQ

spring-boot-starter-amqp

Paquete de inicio para usar Spring AMQP y Rabbit MQ

spring-boot-starter-aop

Paquete de inicio para programación orientada a aspectos usando Spring AOP y AspectJ

spring-boot-starter-artemis

Paquete de inicio para mensajería JMS usando Apache Artemis

spring-boot-starter-batch

Paquete de inicio para usar Spring Batch

spring-boot-starter-cache

Paquete de inicio para usar el soporte de almacenamiento en caché en Spring Framework

spring-boot-starter-data-cassandra

Paquete de inicio para usar la base de datos distribuida Cassandra y Spring Data Cassandra

spring-boot-starter-data-cassandra-reactive

Paquete de inicio para usar una base de datos distribuida de Cassandra y Spring Data Cassandra Reactive

spring-boot-starter-data-couchbase

Paquete de inicio para usar la base de datos orientada a documentos Couchbase y Spring Data Couchbase

spring-boot-starter-data-couchbase-reactive

Paquete inicial para usar la base de datos orientada a documentos Couchbase y Spring Data Couchbase Reactive

spring-boot-starter-data-elasticsearch

Paquete de inicio para utilizar el motor de búsqueda y análisis Elasticsearch y Spring Data Elasticsearch

spring-boot-starter-data-jdbc

Paquete de inicio para usar Spring Data JDBC

spring-boot-starter-data-jpa

Paquete de inicio para usar Spring Data JPA con Hibernate

spring-boot-starter-data-ldap

Paquete de inicio para usar Spring Data LDAP

spring-boot-starter-data-mongodb

Paquete de inicio para usar la base de datos orientada a documentos MongoDB y Spring Data MongoDB

spring-boot-starter-data-mongodb-reactive

Paquete de inicio para usar la base de datos orientada a documentos MongoDB y Spring Data MongoDB Reactive

spring-boot-starter-data-neo4j

Paquete de inicio para usar la base de datos de gráficos Neo4j y Spring Data Neo4j

spring-boot-starter-data-r2dbc

Paquete de inicio para usar Spring Data R2DBC

spring-boot-starter-data -redis

Paquete inicial para usar el almacén de datos clave-valor de Redis a través de Spring Data Redis y el cliente Lettuce

spring-boot-starter-data-redis-reactive

Paquete inicial para usar el almacén de datos clave-valor de Redis a través del almacén reactivo Spring Data Redis y el cliente Lettuce

spring-boot-starter-data-rest

Iniciador paquete para abrir repositorios de Spring Data sobre REST usando Spring Data REST

spring-boot-starter-freemarker

Paquete de inicio para crear aplicaciones web MVC utilizando vistas de FreeMarker

spring-boot-starter-graphql

Paquete de inicio para crear aplicaciones GraphQL usando Spring GraphQL

spring-boot-starter-groovy-templates

Paquete de inicio para crear un MVC web Aplicaciones que utilizan vistas Plantillas Groovy

spring -boot -starter-hateoas

Paquete de inicio para crear una aplicación web RESTful basada en hipermedia a través de Spring MVC y Spring HATEOAS

spring-boot-starter-integration

Paquete de inicio para usar Spring Integration

spring-boot-starter-jdbc

Paquete de inicio para usar JDBC con el grupo de conexiones HikariCP

spring-boot-starter-jersey

Paquete de inicio para crear aplicaciones web RESTful usando JAX-RS y Jersey.

spring-boot-starter-jooq

Paquete de inicio para usar jOOQ para proporcionar acceso a bases de datos SQL usando JDBC.

spring-boot-starter-json

Paquete inicial para leer y escribir json

spring-boot-starter-jta-atomicos

Paquete de inicio para JTA- transacciones usando Atomikos

spring-boot-starter -mail

Un paquete inicial para usar Java Mail y las funciones de soporte de correo electrónico de Spring Framework

spring-boot-starter-mustache

Paquete de inicio para crear aplicaciones web utilizando vistas Moustache

spring-boot-starter-oauth2-client

Paquete de inicio para usar las funciones del cliente Spring Security OAuth2/OpenID Connect

spring-boot-starter-oauth2-resource-server

Paquete de inicio para usar las funciones del servidor de recursos OAuth2 en Spring Security

spring-boot-starter-quartz

Paquete de inicio para usar el programador Quartz

spring-boot-starter-rsocket

Paquete inicial para crear clientes y servidores RSocket

spring-boot-starter-security

Paquete de inicio para usar Spring Seguridad

spring-boot-starter-test

Un paquete inicial para probar aplicaciones Spring Boot utilizando bibliotecas que incluyen JUnit Jupiter, Hamcrest y Mockito

spring-boot-starter-thymeleaf

Paquete de inicio para crear aplicaciones web MVC utilizando vistas Thymeleaf

spring-boot-starter-validation

Paquete de inicio para usar Java Bean Validation con Hibernate Validator

spring-boot-starter-web

Paquete de inicio para crear aplicaciones web, incluido RESTful, utilizando Spring MVC. Utiliza Tomcat como contenedor integrado predeterminado

spring-boot-starter-web-services

Paquete de inicio para usar Spring Web Services

spring-boot-starter-webflux

Paquete de inicio para crear aplicaciones WebFlux utilizando soporte web reactivo en Spring Framework

spring-boot-starter-websocket

Paquete de inicio para crear aplicaciones WebSocket utilizando el soporte WebSocket en Spring Framework

Además de los paquetes de inicio de aplicaciones, se pueden utilizar los siguientes paquetes de inicio para agregar funcionalidad lista para producción:

Tabla 2. Paquetes iniciales de producción de Spring Boot
Nombre Descripción

spring-boot-starter-actuator

Un paquete inicial para usar Actuator de Spring Boot, que proporciona funciones para la implementación de producción, que ayudan usted monitorea y administra su aplicación

Finalmente, Spring Boot también incluye los siguientes paquetes de inicio que puede usar si desea excluir o intercambiar ciertos aspectos técnicos:

Tabla 3. Paquetes técnicos iniciales de Spring Boot
Nombre Descripción

spring-boot-starter-jetty

Paquete de inicio para usar Jetty como un contenedor de servlets integrado.

spring-boot-starter-log4j2

Paquete de inicio para usar Log4j2 con fines de registro.

spring-boot-starter-logging

Paquete de inicio para iniciar sesión utilizando Logback. Paquete de inicio de registro predeterminado

spring-boot-starter-reactor-netty

Un paquete inicial para usar Reactor Netty como servidor HTTP reactivo integrado.

spring-boot-starter-tomcat

Paquete inicial para usar Tomcat como contenedor de servlets integrado. El paquete de inicio predeterminado para el contenedor de servlets utilizado por spring-boot-starter-web

spring-boot-starter-undertow

Paquete inicial para usar Undertow como sistema integrado contenedor de servlets .

Para obtener una lista de paquetes de inicio adicionales aportados por la comunidad, consulte archivo REDME en el módulo spring-boot-starters en GitHub.

Estructuración de código

Spring Boot no requiere ninguna estructura de código específica para funcionar. Sin embargo, existen algunas prácticas recomendadas que son útiles.

Uso del paquete "predeterminado"

Si una clase no contiene una declaración paquete, es Se considera que está en el "paquete por defecto". Por lo general, no se recomienda el uso del "paquete predeterminado" y se debe evitar. Esto puede causar problemas específicos para las aplicaciones Spring Boot que usan las anotaciones @ComponentScan, @ConfigurationPropertiesScan, @EntityScan o @SpringBootApplication a medida que se lee cada clase de cada archivo jar.

Recomendamos seguir las convenciones de nomenclatura de paquetes Java recomendadas y utilizar el nombre de dominio inverso (por ejemplo , com.example.project).

Colocar la clase de aplicación principal

Generalmente se recomienda colocar la clase de aplicación principal en el paquete raíz encima de otras. clases. La anotación @SpringBootApplication a menudo se coloca en la clase principal e implícitamente define un "paquete de búsqueda" base para ciertos elementos. Por ejemplo, si está escribiendo una aplicación JPA, el paquete de clases marcado con la anotación @SpringBootApplication se usa para buscar elementos con la anotación @Entity. El uso de un paquete raíz también le permite aplicar el escaneo de componentes exclusivamente a su proyecto.

Si no desea utilizar @SpringBootApplication anotación El @EnableAutoConfiguration y @ComponentScan que importa el paquete definen la misma lógica, por lo que puede usarlos en su lugar.

La lista a continuación se muestra una estructura típica:

com
 +- example
     +- myapplication
         +- MyApplication.java
         |
         +- customer
         |   +- Customer.java
         |   +- CustomerController.java
         |   +- CustomerService.java
         |   +- CustomerRepository.java
         |
         +- order
             +- Order.java
             +- OrderController.java
             +- OrderService.java
             +- OrderRepository.java

En el archivo MyApplication.java el método main junto con la base @SpringBootApplication se declarará de la siguiente manera:

Java

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}
Kotlin

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
@SpringBootApplication
class MyApplication
fun main(args: Array<String>) {
    runApplication<MyApplication>(*args)
}