Directorio de artículos
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 :
-
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.
-
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.
-
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.
-
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.
-
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 .yml
o.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:
-
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.
-
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.
-
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.
-
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:
-
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.
-
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 .
-
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 .
-
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
@Value
y @ConfigurationProperties
son 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. @Value
Notas:
@Value
Es 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 @Value
y 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.properties
archivo de configuración con el siguiente contenido:
app.name=My Application
app.version=1.0.0
Luego podemos usar anotaciones en Spring Bean @Value
para 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 MyBean
que utiliza @Value
anotaciones para leer los valores de los atributos en el archivo de configuración e @PostConstruct
imprime 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. @ConfigurationProperties
Comentarios:
@ConfigurationProperties
Es 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 @ConfigurationProperties
cuando se utilizan anotaciones, prefix
se 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.properties
archivo de configuración con el siguiente contenido:
app.name=My Application
app.version=1.0.0
Luego podemos crear una clase Java y usar @ConfigurationProperties
anotaciones 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:
@Value
Las 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.@ConfigurationProperties
Las 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, @Value
hay @ConfigurationProperties
formas 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:
-
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.
-
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.
-
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.
-
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:
-
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.
-
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.
-
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:
- par clave-valor:
key1: value1
key2: value2
- lista:
key3:
- item1
- item2
- Mapeos anidados:
key4:
subkey1: value1
subkey2: value2
- Texto multilínea:
key5: |
This is a multiline text.
It can span multiple lines without escaping special characters.
- 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.yml
archivo 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. app
La sección es un mapa que contiene atributos como el nombre, la versión y el autor de la aplicación. server
La sección es un par clave-valor simple que especifica el puerto de lanzamiento del proyecto. database
La 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:
-
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.
-
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.
-
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.
-
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:
-
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.
-
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.active
configuración del entorno actualmente activo se puede especificar configurando la propiedad. Por ejemplo, la configuraciónspring.profiles.active=dev
cargaráapplication-dev.yml
la configuración desde y la configuraciónspring.profiles.active=prod
cargaráapplication-prod.yml
la 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 :
application-dev.yml
: archivo de configuración del entorno de desarrolloapplication-test.yml
: archivo de configuración del entorno de pruebaapplication-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.active
el archivo de configuración correspondiente según el valor de . Por ejemplo, cuando se establece en , dev
se cargará application-dev.yml
la configuración en ; cuando se establece en , test
se cargará application-test.yml
la configuración en ; cuando se establece en , prod
se cargará application- prod.yml
la configuración en .
Al implementar y ejecutar la aplicación, solo necesita modificar spring.profiles.active
el 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.