SpringBoot Avanzado - Configuración Avanzada
Documentos oficiales relacionados con la configuración de SpringBoot: https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config
1. Propiedades temporales
1. Propiedades de configuración de la línea de comandos
Agregue atributos temporales cuando use el comando java -jar para iniciar el paquete jar
--属性名=属性值
Use el formulario para especificar atributos temporales y separe varios atributos con espacios (cada nombre de atributo debe ir precedido --
)
Ejemplo:
java -jar example-0.0.1-SNAPSHOT.jar --server.port=8080 --logging.level.root=warn
2. IDEA establece los parámetros al inicio
Seleccione el programa para comenzar en Editar configuraciones en la esquina superior derecha de la idea, configure los argumentos del programa y el formato del contenido es consistente con los parámetros establecidos en la línea de comando
Como se muestra abajo:
3. Negativa a aceptar parámetros temporales
El parámetro Args se pasa en la clase de inicio del proyecto SpringBoot, como se muestra en el siguiente ejemplo:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
args = new String[]{
"--server.port=8080", "--logging.level.root=warn"};
SpringApplication.run(Application.class, args);
}
}
Como arriba, args en la función principal es el parámetro de inicio pasado por la línea de comando o idea, que se puede modificar escribiendo un programa
El método SpringApplication.run() no puede pasar el parámetro args, para lograr el efecto de negarse a recibir atributos temporales
Por ejemplo:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
Archivos de configuración de segundo y cuarto nivel
- Archivos de configuración en el directorio de desarrollo resources/directory (prioridad más baja)
- Archivos de configuración en el directorio de desarrollo resources/config/directory
- El archivo de configuración del mismo directorio que el paquete jar
- El archivo de configuración en el directorio config/ al mismo nivel que el paquete jar (prioridad más alta)
Cuando existen archivos de configuración con diferentes prioridades al mismo tiempo, las diferentes configuraciones tienen efecto complementario entre sí, y las mismas partes en conflicto tienen efecto con mayor prioridad.
Al mismo tiempo, diferentes tipos de archivos de configuración también tienen diferentes prioridades: yaml < yml < propiedades
3. Especifique el archivo de configuración
1. Especifique el nombre del archivo de configuración
(idea o línea de comando) Pasar parámetros al inicio --spring.config.name=filename
sin extensión de archivo
El valor predeterminado de spring.config.name es aplicación (por lo que el nombre del archivo de configuración es aplicación)
Después de especificar otro nombre de archivo, el archivo de configuración de la aplicación dejará de ser válido y solo se escanearán los nuevos nombres de archivo en los mismos archivos de configuración de cuatro niveles.
Varios nombres están separados por comas, y la especificación posterior tiene prioridad sobre la especificación inicial, por ejemplo:
java -jar example-0.0.1-SNAPSHOT.jar --spring.config.name=application,tempconfig
La aplicación está frente a tempconfig, y las diferentes partes son complementarias, y la parte conflictiva de tempconfig cubre la aplicación.
2. Especifique la ruta del archivo de configuración
(idea o línea de comando) Pasar parámetros al inicio --spring.config.location=file
Especificar la ruta del archivo de configuración
Admite ruta absoluta y ruta relativa, admite classpath:/, debe tener un nombre de sufijo
Múltiples archivos están separados por comas, especificar más tarde tiene prioridad sobre especificar primero
Ejemplo:
java -jar example-0.0.1-SNAPSHOT.jar --spring.config.location=classpath:/application.yml,tempconfig.yml
Tenga en cuenta que tempconfig.yml anterior es una ruta relativa al directorio actual, no en classpath:/
4. Desarrollo multientorno
1. yaml archivo único múltiples entornos
Use ---
para separar diferentes entornos, use spring.config.activate.on-profile para especificar el nombre del entorno actual en diferentes entornos
La parte donde no se especifica el nombre del entorno es la configuración predeterminada, o configuración pública, donde spring.profiles.active se usa para especificar el nombre del entorno para que surta efecto.
Los ejemplos son los siguientes:
# 公共配置
profiles:
active: dev # 生效的环境,多个环境逗号分隔,冲突部分后声明覆盖先声明
---
# 开发环境
spring:
config:
activate:
on-profile: dev,env_dev # 可指定多个环境名称,逗号分隔
server:
port: 8080
La propiedad spring.profiles también se puede usar para especificar el nombre del entorno actual, el efecto es el mismo que spring.config.activate.on-profile, pero desactualizado
---
# 过时写法
spring:
profiles: env1
---
# 推荐写法
spring:
config:
activate:
on-profile: env2
2. yaml multi-archivo multi-entorno
Se pueden escribir diferentes entornos en diferentes archivos de configuración, el nombre del archivo es application-env.yml, donde env es el nombre del entorno.
El archivo application.yml es la configuración predeterminada:
spring:
profiles:
active: dev # 生效的环境
application-dev.yml representa la configuración del entorno de desarrollo:
server:
port: 8081
Los diferentes entornos ya no necesitan establecer el nombre del entorno, sino que están determinados por el nombre del archivo.
3. propiedades multi-archivo multi-entorno
Al igual que los archivos múltiples de yaml, se escriben diferentes configuraciones de entorno en diferentes archivos de propiedades llamados application-env.properties
El archivo application.properties es la configuración predeterminada:
spring.profiles.active: dev # 生效的环境
application-dev.properties representa la configuración del entorno de desarrollo:
server.port: 8081
Además, la configuración del archivo de propiedades no puede escribir varios entornos en el mismo archivo de propiedades, y varios archivos solo pueden establecer varios entornos.
4. Grupos multientorno
Para configuraciones relacionadas con grupos de múltiples entornos, es mejor escribir diferentes entornos en diferentes archivos. Escribir en el mismo archivo puede causar que el orden de carga sea incorrecto.
(1) incluir
Ejemplo:
spring:
profiles:
active: dev # 生效的环境
include: devMysql,devRedis # 引入其它环境到组内
En la configuración anterior, el entorno de desarrollo se utilizará para introducir simultáneamente las dos configuraciones de entorno devMysql y devRedis.
El entorno principal se carga en último lugar y el orden de carga es: devMysql, devRedis, dev, después de cargar la configuración de conflicto, la anulación se carga primero.
No muy práctico, equivalente a activo: devMysql, devRedis, dev
(2) grupo
Ejemplo:
spring:
profiles:
active: dev # 生效的环境
group:
"dev": devMysql,devRedis
"pro": proMysql,proRedis
"test": testMysql,testRedis
Use el grupo para configurar varios grupos y miembros del entorno, y los grupos de cambio solo necesitan cambiar el entorno principal activo
Nota: El entorno principal se carga primero y el orden de carga es dev, devMysql, devRedis
5. Coopere con el entorno múltiple de Maven
Guía del artículo de configuración de varios entornos de Maven: https://blog.csdn.net/Cey_Tao/article/details/126602653
Mire primero la configuración de Maven:
<profiles>
<profile>
<!-- 开发环境 -->
<id>env_dev</id>
<properties>
<spring.profile>dev</jdbc.url>
</properties>
<activation> <!-- 默认生效 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<!-- 生产(正式)环境 -->
<id>env_pro</id>
<properties>
<spring.profile>pro</jdbc.url>
</properties>
</profile>
</profiles>
Mire el archivo de configuración de yaml nuevamente:
spring:
profiles:
active: @spring.profile@ # 读取 Maven 配置中的 spring.profile 属性
Dado que la propiedad spring.profile tiene diferentes valores en diferentes entornos de Maven
Entonces, cuando especifica el entorno Maven para la compilación o el empaquetado, también especifica el entorno SpringBoot
[Reponer]
Después de que Maven cambie el entorno efectivo predeterminado, es posible que el proyecto de inicio de la idea no surta efecto. Cuando se produce el problema de caché de la idea, debe compilarse manualmente y luego comenzar a surtir efecto.