[Spring Boot] (2) Tour de exploración de los archivos de configuración de Spring Boot


prefacio

Los archivos de configuración juegan un papel importante en el desarrollo de software, permitiéndonos modificar y configurar el comportamiento de la aplicación sin cambiar el código fuente . Para un marco moderno como Spring Boot, el archivo de configuración es la clave para su flexibilidad y facilidad de uso. Con la configuración adecuada, podemos migrar aplicaciones sin problemas desde entornos de desarrollo a entornos de prueba y producción, al tiempo que proporcionamos configuraciones específicas para diferentes entornos de implementación .

Este artículo profundizará en todos los aspectos de los archivos de configuración de Spring Boot, desde la sintaxis básica hasta la configuración en diferentes entornos, para ayudar a los lectores a comprender completamente y aplicar de manera flexible el conocimiento relevante de los archivos de configuración. A continuación, analizaré los diferentes aspectos del archivo de configuración y embarquémonos en este viaje de descubrimiento sobre la configuración de Spring Boot.

1. La función del archivo de configuración.

Un archivo de configuración es una forma de externalizar la configuración para almacenar información como parámetros, opciones y configuraciones para una aplicación. Las funciones principales del archivo de configuración son las siguientes :

  1. Flexibilidad y configurabilidad : al separar la información de configuración del código, las aplicaciones se vuelven más flexibles y configurables . Esto significa que podemos ajustar el comportamiento de la aplicación para satisfacer diferentes necesidades comerciales y requisitos ambientales simplemente modificando los archivos de configuración sin modificar el código.

  2. Acoplamiento reducido : cuando se externaliza la información de configuración, se reducen las dependencias entre los diferentes componentes de una aplicación . De esta manera, cuando es necesario cambiar una determinada configuración, solo es necesario modificar el archivo de configuración sin afectar otras partes del código, lo que reduce el acoplamiento entre códigos y hace que el código sea más fácil de mantener y expandir.

  3. Implementación y administración convenientes : a través del archivo de configuración, podemos separar la configuración de la aplicación del código, de modo que al implementar, solo sea necesario reemplazar o actualizar el archivo de configuración sin volver a compilar todo el código. Al mismo tiempo, las configuraciones en diferentes entornos se pueden gestionar a través de diferentes archivos de configuración, simplificando así la implementación y gestión de aplicaciones en diferentes entornos.

  4. Seguridad : la información confidencial (como contraseñas de bases de datos, claves API, etc.) generalmente no debe estar codificada en código, sino almacenada en archivos de configuración. Esto evita exponer información confidencial en repositorios de código o aplicaciones lanzadas, mejorando la seguridad de las aplicaciones.

  5. Internacionalización y localización : los archivos de configuración se pueden utilizar para almacenar texto e información de localización en diferentes idiomas. De esta manera, el programa de aplicación puede leer el archivo de configuración correspondiente según el entorno lingüístico del usuario, para cumplir con los requisitos de internacionalización y localización.

En segundo lugar, el formato del archivo de configuración.

2.1 Formato del archivo de configuración de Spring Boot

Spring Boot admite múltiples formatos de archivos de configuración, los más comunes son propiedades y yml (YAML) . Diferentes formatos son adecuados para diferentes escenarios y los desarrolladores pueden elegir el formato de archivo de configuración que más les convenga según las necesidades reales.

1. formato de propiedades

Properties es un formato de texto de pares clave-valor, cada línea contiene una propiedad y el valor correspondiente . Su formato es similar a: key=value. En Spring Boot, se pueden configurar varias propiedades utilizando el formato de propiedades. Por ejemplo:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=myusername
spring.datasource.password=mypassword
server.port=8080

2. formato yml (YAML)

YAML es un formato de serialización de datos conciso y fácil de leer. Su nombre completo Yet Another Markup Language, traducido al chino, es "otro lenguaje de marcado". Expresa缩进 relaciones jerárquicas en forma de estructuras de datos como listas y mapas y las admite . En Spring Boot, los archivos de configuración en formato yml generalmente tienen el sufijo .ymlo.yaml . Comparado con el formato de propiedades, el formato yml es más flexible y fácil de escribir. Por ejemplo:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: myusername
    password: mypassword
server:
  port: 8080

En un proyecto Spring Boot, los archivos de configuración en formato de propiedades y yml se pueden usar teóricamente al mismo tiempo y pueden coexistir en el mismo proyecto. Cuando los archivos de configuración de propiedades y yml existen al mismo tiempo y tienen los mismos elementos de configuración, la configuración en el archivo de propiedades tendrá prioridad, es decir, se sobrescribirá la configuración con el mismo nombre en el archivo yml .

  • Este mecanismo de prioridad de configuración permite a los desarrolladores elegir de manera más flexible configurar diferentes parámetros en propiedades o formato yml, y organizar y administrar diferentes tipos de información de configuración en diferentes archivos de configuración.
  • Por ejemplo, los elementos de configuración normales y relativamente simples se pueden colocar en archivos de propiedades, mientras que los elementos de configuración estructurados y complejos se pueden colocar en archivos yml para mejorar la legibilidad y el mantenimiento.

Sin embargo, aunque teóricamente se permiten archivos de configuración en ambos formatos, en proyectos prácticos se suele elegir un formato de archivo de configuración unificado. Hacerlo tiene los siguientes beneficios:

  1. Mantenimiento unificado : el uso de un formato de archivo de configuración unificado reduce los costos de mantenimiento, la confusión y los errores. Toda la información de configuración se concentra en el mismo formato, lo que es más fácil de mantener y gestionar para el equipo de desarrollo de forma unificada.

  2. Tasa de fallos reducida : El formato del archivo de configuración unificado evita problemas de conversión y adaptación entre diferentes formatos, reduciendo posibles errores y fallos.

  3. Legibilidad : el uso de un formato de archivo de configuración unificado puede mejorar la comunicación y la comprensión entre los miembros del equipo y reducir la confusión causada por las diferencias de formato.

  4. Estandarización : un formato de archivo de configuración unificado ayuda a formar normas y mejores prácticas, mejorando la mantenibilidad y la estabilidad del proyecto.

2.2 La diferencia entre propiedades y yml

Al elegir un formato de archivo de configuración, puede considerar los siguientes aspectos:

  1. Estructura gramatical : el formato de propiedades utiliza una estructura de par clave-valor simple , que es adecuada para escenarios de configuración simples. El formato yml utiliza sangría para representar relaciones jerárquicas , que pueden mostrar estructuras de configuración complejas con mayor claridad y son adecuados para manejar configuraciones más complejas.

  2. Legibilidad : El formato yml es más legible y fácil de mantener debido a su estructura con sangría . Por el contrario, el formato de propiedades puede parecer detallado y poco intuitivo cuando hay muchas configuraciones o anidamiento profundo .

  3. Extensibilidad : el formato yml admite estructuras de datos más ricas, como listas y mapas, lo que lo hace más flexible cuando se trata de configuraciones complejas . El formato de propiedades solo puede representar pares clave-valor simples .

  4. Restricciones de nombres de clave : los nombres de clave en el formato de propiedades no pueden contener espacios y deben seguir ciertas convenciones de nomenclatura . Los nombres de clave en formato yml pueden contener espacios, lo cual es más flexible .

En general, para configuraciones simples, el formato de propiedades puede ser más intuitivo y conveniente; para configuraciones complejas, la legibilidad y flexibilidad del formato yml lo convierten en una mejor opción. En aplicaciones prácticas, elegir el formato de archivo de configuración adecuado es una decisión importante basada en las necesidades del proyecto y las preferencias del equipo. Spring Boot proporciona soporte integral para los dos formatos, que se pueden seleccionar y utilizar de acuerdo con la situación real del proyecto.

Tres, archivo de configuración de propiedades

3.1 sintaxis básica de propiedades

El archivo de configuración de propiedades es un formato de texto de par clave-valor simple, cada línea contiene una propiedad y el valor correspondiente, y el signo igual "=" se usa para conectar el nombre de la clave y el valor de la clave. La sintaxis básica es la siguiente:

# 配置项目的端口号
server.port=8084
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=
utf8
spring.datasource.username=root
spring.datasource.password=root

PD: utilice "#" en el archivo de configuración para agregar información de comentarios.

3.2 Lectura de archivos de configuración

@Valuey @ConfigurationPropertiesson dos formas comunes de leer valores de configuración en Spring Boot, las cuales se pueden usar para vincular valores de propiedad en archivos de configuración a objetos Java para facilitar su uso en el código.

1. @ValueNotas:

@ValueEs una anotación en el marco Spring, que se puede usar directamente para inyectar el valor del atributo en el archivo de configuración en el atributo en Spring Bean . Al utilizar anotaciones en las propiedades @Valuey especificar el nombre clave de la propiedad (como ${key}), Spring Boot leerá automáticamente el valor correspondiente del archivo de configuración y lo asignará a la propiedad.

Supongamos que tenemos un application.propertiesarchivo de configuración con el siguiente contenido:

app.name=My Application
app.version=1.0.0

Luego podemos usar anotaciones en Spring Bean @Valuepara leer estos elementos de configuración:

@Component
public class MyBean {
    
    
    @Value("${app.name}")
    private String appName;

    @Value("${app.version}")
    private String appVersion;

    @PostConstruct
    public void doPostConstruct(){
    
    
        System.out.println("appName: " + appName);
        System.out.println("appVersion: " + appVersion);
    }
}

El código anterior representa la creación de uno MyBeanque utiliza @Valueanotaciones para leer los valores de los atributos en el archivo de configuración e @PostConstructimprime los valores de los atributos leídos en el método marcado por las anotaciones. Ejecute la clase de inicio y podrá ver que la consola imprime información de configuración relevante:

2. @ConfigurationPropertiesComentarios:

@ConfigurationPropertiesEs una anotación proporcionada por Spring Boot dedicada a leer las propiedades del archivo de configuración. Puede vincular el valor del atributo en el archivo de configuración al atributo correspondiente en el objeto Java y proporciona una función de vinculación de elementos de configuración más flexible . Cabe señalar que @ConfigurationPropertiescuando se utilizan anotaciones, prefixse debe proporcionar un parámetro para especificar el prefijo del atributo en el archivo de configuración para la coincidencia de atributos.

Supongamos que tenemos un application.propertiesarchivo de configuración con el siguiente contenido:

app.name=My Application
app.version=1.0.0

Luego podemos crear una clase Java y usar @ConfigurationPropertiesanotaciones para leer estos elementos de configuración:

@Component
@Setter
@ConfigurationProperties("app")
public class AppConfig {
    
    
    private String name;
    private String version;

    @PostConstruct
    public void init() {
    
    
        System.out.println("appName: " + name);
        System.out.println("appVersion: " + version);
    }
}

En el ejemplo anterior, @ConfigurationProperties(prefix = "app")el prefijo de atributo en el archivo de configuración se especifica como "aplicación", y Spring Boot leerá automáticamente los elementos de configuración con el prefijo "aplicación" y asignará el valor correspondiente al atributo correspondiente de la clase AppConfig.

注意,此时一定要提供 Setter 方法才行,此处我使用的是Lombok工具中的 @Setter 注解为我提供 Setter 方法。

Ejecute la clase de inicio:

La diferencia entre los dos:

  • @ValueLas anotaciones se utilizan para inyectar directamente un valor de propiedad en un archivo de configuración en una propiedad Spring Bean. Adecuado para lectura sencilla de elementos de configuración.
  • @ConfigurationPropertiesLas anotaciones se utilizan para vincular múltiples valores de atributos en un archivo de configuración a múltiples atributos en un objeto Java, lo que proporciona una función de vinculación de elementos de configuración más flexible y admite la configuración de estructuras de datos complejas. Adecuado para lectura de elementos de configuración complejos.

En resumen, @Valuehay @ConfigurationPropertiesformas comunes de leer los valores de configuración; la forma a elegir depende de las necesidades reales y la complejidad de los elementos de configuración.

3.3 Análisis de ventajas y desventajas de las propiedades.

3.3 Análisis de ventajas y desventajas de las propiedades:

ventaja:

  1. Simple e intuitivo : el archivo de configuración de propiedades adopta un formato de par clave-valor simple, que es fácil de escribir y leer, y es muy intuitivo y conveniente para elementos de configuración simples.

  2. Amplio soporte : el formato de propiedades es un formato de archivo de configuración común que es compatible con la mayoría de los lenguajes y marcos de programación, por lo que es adecuado para diversos escenarios de aplicaciones.

  3. Configuración clara : dado que el archivo de configuración de propiedades expresa la correspondencia entre los elementos de configuración y los valores de configuración en forma de pares clave-valor, la configuración es clara y fácil de mantener y modificar.

  4. Lectura rápida : el formato del archivo de configuración de propiedades es simple y la velocidad de lectura es rápida, lo que es más eficiente para obtener rápidamente información de configuración.

defecto:

  1. Falta de estructura : el archivo de configuración de propiedades solo admite estructuras simples de pares clave-valor y no puede representar estructuras de datos complejas, como listas y objetos anidados. Cuando el elemento de configuración es más complejo, es posible que no sea lo suficientemente flexible.

  2. Restricción de nombre de clave : los nombres de clave en el archivo de configuración de propiedades no pueden contener caracteres especiales como espacios y deben seguir ciertas convenciones de nomenclatura, lo cual no es lo suficientemente flexible.

  3. No se admiten valores de varias líneas : los valores en el archivo de configuración de propiedades deben escribirse en una línea y no se admite la representación entre líneas de los valores de configuración, lo que puede no ser conveniente al configurar texto largo.

En resumen, el archivo de configuración de propiedades es un formato de configuración simple y práctico, adecuado para escenarios de configuración simples. Sin embargo, el formato de propiedades tiene algunas desventajas obvias, como falta de estructura, restricciones de nombres de claves, redundancia, etc., que pueden limitar su uso cuando el elemento de configuración es más complejo. En el desarrollo real, de acuerdo con la complejidad de la configuración y los requisitos del proyecto, puede elegir un formato de archivo de configuración más flexible, como el formato yml, para cumplir con requisitos de configuración más complejos.

4. Descripción del archivo de configuración yml

4.1 sintaxis básica de yml

El formato yml utiliza sangría para indicar relaciones jerárquicas, admite estructuras de datos como listas y mapas, y funciones como comentarios y texto de varias líneas. La sintaxis básica es la siguiente:

  1. par clave-valor:
key1: value1
key2: value2
  1. lista:
key3:
  - item1
  - item2
  1. Mapeos anidados:
key4:
  subkey1: value1
  subkey2: value2
  1. Texto multilínea:
key5: |
  This is a multiline text.
  It can span multiple lines without escaping special characters.
  1. Notas:
# This is a comment.
key6: value6  # This is another comment.

yml 配置文件的读取和 properties 配置文件读取方法一致。

4.2 casos de uso de yml

Supongamos que tenemos un application.ymlarchivo de configuración con el siguiente contenido:

app:
  name: My Application
  version: 1.0.0
  author: 张三

server:
  port: 8080

database:
  url: jdbc:mysql://localhost:3306/mydb
  username: myusername
  password: mypassword

En el caso anterior, el archivo de configuración en formato yml muestra una variedad de métodos de configuración comúnmente utilizados. appLa sección es un mapa que contiene atributos como el nombre, la versión y el autor de la aplicación. serverLa sección es un par clave-valor simple que especifica el puerto de lanzamiento del proyecto. databaseLa sección es un mapa anidado que contiene propiedades relacionadas con la conexión de la base de datos.

4.3 Análisis de ventajas y desventajas de yml.

ventaja:

  1. Flexible y fácil de leer : el formato yml utiliza sangría para representar relaciones jerárquicas, lo que facilita la lectura y la escritura. Se admiten funciones como listas, mapas y texto de varias líneas, que pueden mostrar más claramente estructuras de configuración complejas y mejorar la legibilidad y el mantenimiento de los archivos de configuración.

  2. Soporte para estructuras de datos complejas : el formato yml admite listas y mapas anidados, que pueden representar estructuras de datos más complejas y son adecuados para procesar elementos de configuración complejos.

  3. Comentarios de soporte : el formato yml permite agregar comentarios y se puede agregar información de comentarios explicativos al archivo de configuración para facilitar la comprensión y explicación del significado de los elementos de configuración.

  4. No limitado por nombres de clave : los nombres de clave en formato yml pueden contener caracteres especiales como espacios y no necesitan seguir convenciones de nomenclatura específicas, lo cual es más flexible.

defecto:

  1. Costo de aprendizaje : en comparación con el formato de propiedades, la sintaxis del formato yml puede ser más complicada y los principiantes necesitan algo de tiempo para adaptarse y aprender.

  2. Propenso a errores : dado que el formato yml se basa en la sangría para representar la relación jerárquica, si la sangría es incorrecta, puede causar errores de análisis de configuración, lo que aumenta la posibilidad de errores.

En resumen, el archivo de configuración yml es un formato de configuración flexible y fácil de leer, adecuado para escenarios de configuración complejos. Tiene las ventajas de ser flexible y fácil de leer, admitir estructuras de datos complejas, admitir anotaciones y no estar restringido por nombres clave, lo que puede mejorar la legibilidad y el mantenimiento de los archivos de configuración. Sin embargo, el formato yml también tiene algunas desventajas, como un alto costo de aprendizaje y propensión a errores, que deben desarrollarse.

5. Establecer archivos de configuración en diferentes entornos.

En Spring Boot, se pueden distinguir diferentes entornos a través de diferentes archivos de configuración, como el entorno de desarrollo, el entorno de prueba y el entorno de producción. Spring Boot se cargará application.yml(o application.properties) como el archivo de configuración principal de forma predeterminada, pero se pueden cargar diferentes archivos de configuración según los diferentes entornos. A través de reglas de nomenclatura, Spring Boot puede identificar y cargar automáticamente los archivos de configuración del entorno correspondientes.

En Spring Boot, la configuración de archivos de configuración yml en diferentes entornos se puede lograr mediante reglas de nomenclatura. Las siguientes son reglas de nomenclatura de archivos de configuración para entornos de desarrollo, prueba y producción.
Archivo de configuración del entorno de desarrollo:application-{profile}.yml

  • Ejemplo de nomenclatura:application-dev.yml
  • {profile}La parte es el nombre del entorno, por ejemplo: dev, desarrollo, etc.

Archivo de configuración del entorno de prueba:application-{profile}.yml

  • Ejemplo de nomenclatura:application-test.yml
  • {profile}La parte es el nombre del entorno, por ejemplo: prueba, prueba, etc.

Archivo de configuración del entorno de producción:application-{profile}.yml

  • Ejemplo de nomenclatura:application-prod.yml
  • {profile}La parte es el nombre del entorno, por ejemplo: prod, producción, etc.

De acuerdo con las reglas de nomenclatura anteriores, cuando se inicia la aplicación Spring Boot, la spring.profiles.activeconfiguración del entorno actualmente activo se puede especificar configurando la propiedad. Por ejemplo, la configuración spring.profiles.active=devcargará application-dev.ymlla configuración desde y la configuración spring.profiles.active=prodcargará application-prod.ymlla configuración desde .

Supongamos que tenemos tres entornos: un entorno de desarrollo, un entorno de prueba y un entorno de producción. Podemos crear el archivo de configuración correspondiente de la siguiente manera :

  1. application-dev.yml: archivo de configuración del entorno de desarrollo
  2. application-test.yml: archivo de configuración del entorno de prueba
  3. application-prod.yml: archivo de configuración del entorno de producción

En estos archivos de configuración, se pueden configurar los elementos de configuración correspondientes para diferentes entornos. Por ejemplo:

application-dev.yml:

app:
  name: My Dev Application

server:
  port: 8080

debug: true

application-test.yml:

app:
  name: My Test Application

server:
  port: 8081

debug: true

application-prod.yml:

app:
  name: My Production Application

server:
  port: 8082

debug: false

Archivo de configuración principal application.yml:

app:
  name: My Application
  version: 1.0.0

spring:
  profiles:
    default: dev

De esta forma, al iniciar una aplicación Spring Boot en un entorno diferente, Spring Boot cargará automáticamente spring.profiles.activeel archivo de configuración correspondiente según el valor de . Por ejemplo, cuando se establece en , devse cargará application-dev.ymlla configuración en ; cuando se establece en , testse cargará application-test.ymlla configuración en ; cuando se establece en , prodse cargará application- prod.ymlla configuración en .

Al implementar y ejecutar la aplicación, solo necesita modificar spring.profiles.activeel valor del nombre del entorno correspondiente y podrá usar la configuración correspondiente. Este método hace que la configuración del programa de aplicación sea más flexible y conveniente para cambiar en diferentes entornos.

Supongo que te gusta

Origin blog.csdn.net/qq_61635026/article/details/132124482
Recomendado
Clasificación