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:

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

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

  1. Archivos de configuración en el directorio de desarrollo resources/directory (prioridad más baja)
  2. Archivos de configuración en el directorio de desarrollo resources/config/directory
  3. El archivo de configuración del mismo directorio que el paquete jar
  4. El archivo de configuración en el directorio config/ al mismo nivel que el paquete jar (prioridad más alta)

inserte la descripción de la imagen aquí

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=filenamesin 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=fileEspecificar 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.

Supongo que te gusta

Origin blog.csdn.net/Cey_Tao/article/details/127560395
Recomendado
Clasificación