Maison > Java > javaDidacticiel > Comment configurer l'externalisation SpringBoot

Comment configurer l'externalisation SpringBoot

WBOY
Libérer: 2023-05-15 09:43:05
avant
1236 Les gens l'ont consulté

SpringBoot configuration externalisée (basée sur 2.4.0 et versions ultérieures)

Spring Boot vous permet d'externaliser la configuration afin que vous puissiez utiliser le même code d'application dans différents environnements. Vous pouvez utiliser diverses sources de configuration externes, notamment des fichiers de propriétés Java, des fichiers YAML, des variables d'environnement et des paramètres de ligne de commande.

Les valeurs de propriété peuvent être injectées directement dans vos beans à l'aide de l'annotation @Value, accessibles via l'environnement de Spring ou liées à des objets via @ConfigurationProperties. Dans le même temps, Spring Boot fournit également un PropertyOrder très spécial pour permettre aux utilisateurs de remplacer certaines valeurs de propriété dans des scénarios appropriés. Cet ordre est conçu pour permettre un remplacement raisonnable des valeurs.

La priorité est de faible à élevée dans l'ordre suivant. La valeur de propriété de cette dernière remplace la première Toutes les configurations formeront des configurations complémentaires :

Propriétés par défaut (spécifiées à l'aide de SpringApplication.setDefaultProperties )

Les propriétés de configuration introduites par l'annotation @PropertySource sur la classe @Configuration @Configuration类上的@PropertySource注解引入的配置属性

请注意,这样的属性源直到ApplicationContext被刷新时才会被添加到环境中。这对于配置某些属性来说已经太晚了,比如logging.* spring.main.* ,它们在刷新开始前就已经被读取了。

配置数据(例如application.properties文件)

对于random.*形式的属性,优先从RandomValuePropertySource获取(指优先于后者)

OS environment variables((操作系统环境变量)

Java System properties(Java 系统属性System.getProperties()

JNDI 属性

ServletContext 的 初始化参数

ServletConfig 的 初始化参数

SPRING_APPLICATION_JSON 属性

命令行参数

test 模块下的 properties 属性

test 模块下 @TestPropertySource 注解引入的配置文件

启用 devtools 时 $HOME/.config/spring-boot 路径下的配置

配置数据文件按以下加载顺序考虑:

  • 打包在 jar 中的应用程序属性(application.properties 和 YAML)

  • 打包在 jar 中的特定配置文件的应用程序属性(application-{profile}.properties 和 YAML)

  • 打包 jar 之外的应用程序属性(application.properties 和 YAML)

  • 打包 jar 之外的特定配置文件的应用程序属性(application-{profile}.properties 和 YAML)

SpringBoot配置文件

Spring中常见的配置文件类型

  • XML资源

  • Properties资源

  • YAML资源

Profile概述

Profile 本质上代表一种用于组织配置信息的维度,在不同场景下可以代表不同的含义。例如,如果 Profile 代表的是一种状态,我们可以使用 open、halfopen、close 等值来分别代表全开、半开和关闭等。再比如系统需要设置一系列的模板,每个模板中保存着一系列配置项。

配置命名规则:

/{application}.yml
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
Copier après la connexion

配置文件加载顺序

Spring Boot 启动时,会自动加载 JAR 包内部及 JAR 包所在目录指定位置的配置文件(Properties 文件、YAML 文件)。列表按优先级排序(较低项目的值覆盖较早项目的值)

classpath( –classpath )

classpath 根路径

classpath 下的 /config 包

当前目录( –file )

当前目录下

当前目录下的 config/ 子目录

当前目录下的 config/ 子目录的直接子目录

. project-sample
├── config
│   ├── application.yml (4)
│   └── src/main/resources
|   │   ├── application.yml (1)
|   │   └── config
|   |   │   ├── application.yml (2)
├── application.yml (3)
Copier après la connexion

启动时加载配置文件顺序:1 > 2 > 3 > 4

Profile 配置覆盖变更(2.4.0以后)

2.4.0以前版本,默认情况的加载顺序如下:

  • 打包在 jar 中的应用程序属性(application.properties 和 YAML)。

  • 打包 jar 之外的应用程序属性(application.properties 和 YAML)

  • 打包在 jar 中的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML)

  • 打包 jar 之外的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML)

注意:在之前的版本中,JAR 包外部的application.properties配置文件不会覆盖 JAR 包里面的基于 "profile" 的application-{profile}.properties 配置文件。

2.4.0

Veuillez noter qu'une telle propriété source Il ne sera pas ajouté à l'environnement tant que ApplicationContext n'est pas actualisé. Il est trop tard pour configurer certaines propriétés, telles que logging.* et spring.main.* , qui ont déjà été lues avant le début de l'actualisation.
  • Données de configuration (comme le fichier application.properties)

    Pour les propriétés sous forme de random.*, la priorité est donnée à RandomValuePropertySource Obtenir (en faisant référence à la priorité sur cette dernière)
  • Variables d'environnement du système d'exploitation((variables d'environnement du système d'exploitation)

    Propriétés du système Java(Propriétés du système Java System.getProperties()< /code>)</li><li>Attribut JNDI<p></p>Paramètre d'initialisation de ServletContext#🎜🎜##🎜🎜#Paramètre d'initialisation de ServletConfig#🎜🎜##🎜 🎜#SPRING_APPLICATION_JSON attribut# 🎜 🎜##🎜🎜#Paramètres de ligne de commande#🎜🎜##🎜🎜#propriétés des propriétés sous le module de test#🎜🎜##🎜🎜#Fichiers de configuration introduits par l'annotation @TestPropertySource sous le module de test# 🎜🎜##🎜🎜#Enable Pour les outils de développement, la configuration sous le chemin $HOME/.config/spring-boot #🎜🎜##🎜🎜#Les fichiers de données de configuration sont considérés dans l'ordre de chargement suivant : #🎜🎜## 🎜🎜##🎜🎜##🎜🎜#Emballé dans Propriétés de l'application dans le pot (application.properties et YAML) YAML) #🎜🎜##🎜🎜##🎜🎜##🎜🎜#Emballage des propriétés de l'application en dehors du pot (application .properties et YAML) #🎜🎜##🎜🎜##🎜🎜##🎜🎜#Packaging Propriétés d'application pour des profils spécifiques en dehors de jar (application-{profile}.properties et YAML) #🎜🎜##🎜🎜#< /ul>#🎜🎜#Profil SpringBoot#🎜🎜#<h4>Types de fichiers de configuration courants Spring</h4>#🎜🎜##🎜🎜##🎜🎜#Ressources XML#🎜🎜##🎜🎜##🎜🎜 ##🎜🎜#Ressources Propriétés#🎜🎜##🎜🎜## 🎜🎜##🎜🎜#Ressource YAML#🎜🎜##🎜🎜#</ul><h4>Présentation du profil</h4>#🎜🎜# Le profil représente essentiellement une dimension pour organiser les informations de configuration, dans différentes significations. Il peut signifier différentes significations dans les scénarios. Par exemple, si Profile représente un état, nous pouvons utiliser des valeurs telles que ouvert, semi-ouvert et fermé pour représenter respectivement complètement ouvert, semi-ouvert, fermé, etc. Un autre exemple est que le système doit configurer une série de modèles, et chaque modèle stocke une série d'éléments de configuration. #🎜🎜##🎜🎜#Règles de dénomination de la configuration : #🎜🎜#<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:yaml;">spring: profiles: active: dev #激活开发环境配置</pre><div class="contentsignin">Copier après la connexion</div></div><div class="contentsignin">Copier après la connexion</div></div><h4>Séquence de chargement du fichier de configuration</h4>#🎜🎜#Lorsque Spring Boot démarre, il chargera automatiquement l'intérieur du package JAR et le spécifié emplacement dans le répertoire où se trouve le package JAR. Fichiers de configuration (fichiers de propriétés, fichiers YAML). La liste est triée par priorité (les valeurs des éléments inférieurs remplacent les valeurs des éléments précédents) #/package de configuration sous classpath#🎜🎜##🎜🎜#Répertoire actuel (&ndash;fichier)#🎜🎜##🎜 🎜#Sous le répertoire courant#🎜🎜##🎜🎜#Sous-répertoire Configuration/ sous le répertoire courant# 🎜🎜##🎜🎜#Sous-répertoire direct du sous-répertoire config/ dans le répertoire courant#🎜🎜#<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:java;">$ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties</pre><div class="contentsignin">Copier après la connexion</div></div><div class="contentsignin">Copier après la connexion</div></div>#🎜🎜#Loading séquence du fichier de configuration au démarrage : 1 > 2 > 3 > 4#🎜🎜#< h5>Modifications de la couverture de configuration du profil (après 2.4.0)</h5>#🎜🎜#<code>2.4.0</code >Pour les versions précédentes, l'ordre de chargement par défaut est le suivant : #🎜🎜##🎜🎜##🎜 🎜##🎜🎜# Propriétés de l'application (application.properties et YAML) conditionnées en jar. #🎜🎜##🎜🎜##🎜🎜##🎜🎜#Propriétés de l'application du package (application.properties et YAML) en dehors du pot #🎜🎜##🎜🎜##🎜🎜##🎜🎜#Package dans le profil jar- propriétés d'application spécifiques dans (application-{profile}.properties et YAML)#🎜🎜##🎜🎜##🎜🎜##🎜🎜#Propriétés d'application spécifiques au profil en dehors du fichier jar packagé (application-{profile}.properties et YAML) #🎜🎜##🎜🎜#</ul>#🎜🎜#Remarque : Dans les versions précédentes, la configuration <code>application.properties en dehors du package JAR Le fichier n'écrasera pas le fichier basé sur le "profil" Fichier de configuration application-{profile}.properties dans le package JAR. #🎜🎜##🎜🎜#2.4.0 et versions ultérieures, l'ordre de recherche par défaut est le suivant : garantir que les paramètres d'application en dehors du package JAR doivent avoir priorité sur les paramètres de configuration d'activation spécifiques à l'intérieur du package JAR # 🎜🎜##🎜🎜##🎜🎜##🎜🎜# Propriétés de l'application (application.properties et YAML) conditionnées dans un pot. #🎜🎜##🎜🎜##🎜🎜##🎜🎜#Propriétés d'application spécifiques au profil (application-{profile}.properties et YAML) conditionnées dans un pot #🎜🎜##🎜🎜##🎜 🎜##🎜🎜 #Propriétés de l'application (application.properties et YAML) en dehors du pot emballé#🎜🎜#
  • 打包 jar 之外的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML)

注意:同一位置下,Properties 文件优先级高于 YAML 文件 , 如果Spring Boot在优先级更高的位置找到了配置,那么它就会无视优先级低的配置。

文档排序(2.4.0以后)

从 Spring Boot 2.4 开始,加载 Properties 和 YAML 文件时候会遵循, 在文档中声明排序靠前的属性将被靠后的属性覆盖 。

激活指定配置文件

命令行激活: --spring.profiles.active=prod

spring:
  profiles:
    active: dev #激活开发环境配置
Copier après la connexion
Copier après la connexion

配置文件激活如上,只需要在application.yml或者properties文件中配置即可

注意:在application.yml或者properties文件存在的情况下,不管激活的是prod还是dev,还是会读取默认的配置文件,只不过指定的配置文件会覆盖默认配置文件中的属性

导入额外的配置文件(2.4.0以后)

可以使用spring.config.import属性从其他地方导入更多的配置数据,比如spring.config.import=my.yaml 。它会将 my.yaml 文件作为临时文件放在当前配置文件之后处理,因此其属性具有更高的优先级

激活外部配置文件

在运行Jar包的命令中加入这个参数就可以指定Jar包以外的配置文件的位置了,也可以在application的配置文件中配置该属性

$ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
Copier après la connexion
Copier après la connexion

这个参数就是指定外部application.yml配置文件位置的参数,它支持classpathfile路径

java -jar myproject.jar --spring.config.name=myproject
Copier après la connexion

如果您不喜欢application.properties作为配置文件名,您可以通过指定spring.config.name环境属性来切换到另一个文件名

optional可选的配置文件

对于spring.config.locationspring.config.additional-locationspring.config.import等属性的路径,添加optional:前缀,则当对应文件不存在时应用仍可以正常启动

比如spring.config.location=optional:file:/my.yaml,当应用启动加载文件 my.yaml 不存在时,不会抛出异常

嵌入系统配置信息

例如,如果想要获取当前应用程序的名称并作为一个配置项进行管理,那么很简单,我们直接通过 ${spring.application.name} 占位符:

myapplication.name : ${spring.application.name}
Copier après la connexion

假设我们使用 Maven 来构建应用程序,那么可以按如下所示的配置项来动态获取与系统构建过程相关的信息:

info: 
  app:
    encoding: @project.build.sourceEncoding@
    java:
      source: @java.version@
      target: @java.version@
# 等同于下述效果
info:
  app:
    encoding: UTF-8
    java:
        source: 1.8.0_31
        target: 1.8.0_31
Copier après la connexion

配置参数提示

additional-spring-configuration-metadata.jsonspring-configuration-metadata.json在springboot-starter官方项目或第三方starter项目中随处可见,那它起的作用是什么?

  • 配置additional-spring-configuration-metadata.json文件后,在开发人员的IDE工具使用个人编写的配置读取很有效的在application.propertiesapplication.yml文件下完成提示

配置处理器

在Maven中,该依赖关系应被声明为可选的,如以下例子所示。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
Copier après la connexion

创建additional-spring-configuration-metadata.json

resources/META-INF目录下创建additional-spring-configuration-metadata.json,分类为 “groups” 或 “properties”,附加值提示分类为 "hints",如以下例子所示:

{
    "groups": [
        {
            "name": "server",
            "type": "org.springframework.boot.autoconfigure.web.ServerProperties",
            "sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties"
        },
        {
            "name": "spring.jpa.hibernate",
            "type": "org.springframework.boot.autoconfigure.orm.jpa.JpaProperties$Hibernate",
            "sourceType": "org.springframework.boot.autoconfigure.orm.jpa.JpaProperties",
            "sourceMethod": "getHibernate()"
        }
    ...
    ],
    "properties": [
        {
            "name": "server.port",
            "type": "java.lang.Integer",
            "sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties"
        },
        {
            "name": "server.address",
            "type": "java.net.InetAddress",
            "sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties"
        },
        {
            "name": "spring.jpa.hibernate.ddl-auto",
            "type": "java.lang.String",
            "description": "DDL mode. This is actually a shortcut for the "hibernate.hbm2ddl.auto" property.",
            "sourceType": "org.springframework.boot.autoconfigure.orm.jpa.JpaProperties$Hibernate"
        }
    ...
    ],
    "hints": [
        {
            "name": "spring.jpa.hibernate.ddl-auto",
            "values": [
                {
                    "value": "none",
                    "description": "Disable DDL handling."
                },
                {
                    "value": "validate",
                    "description": "Validate the schema, make no changes to the database."
                },
                {
                    "value": "update",
                    "description": "Update the schema if necessary."
                },
                {
                    "value": "create",
                    "description": "Create the schema and destroy previous data."
                },
                {
                    "value": "create-drop",
                    "description": "Create and then destroy the schema at the end of the session."
                }
            ]
        }
    ]
}
Copier après la connexion
Property 属性

properties 数组中包含的JSON对象可以包含下表中描述的属性。

#🎜🎜 #nameStringLe nom complet de l'attribut. Le nom est en minuscules, séparé par des points (par exemple, server.address). Cet attribut est obligatoire. typeStringLa signature complète du type de données de la propriété (par exemple, java.lang. String ), mais il existe également des types génériques complets (par exemple java.util.Map). Vous pouvez utiliser cette propriété pour indiquer aux utilisateurs les types de valeurs qu'ils peuvent saisir. Par souci de cohérence, le type d'une primitive est spécifié à l'aide de son type wrapper (par exemple, boolean devient java.lang.Boolean). Si le type n’est pas connu, il peut être omis. descriptionStringUne brève description de la propriété qui peut être affichée à l'utilisateur. S'il n'y a pas de description, elle peut être omise. La dernière ligne de la description doit se terminer par un point (.). sourceTypeStringLe nom de classe de la source qui a contribué à cette propriété. Par exemple, si la propriété provient d'une classe annotée avec @ConfigurationProperties, la propriété contiendra le nom complet de la classe. Peut être omis si le type de source est inconnu. defaultValueObjectValeur par défaut, si cet attribut n'est pas spécifié, cette valeur est utilisée. Si le type de la propriété est un tableau, il peut s'agir d'un tableau de valeurs. Si la valeur par défaut est inconnue, elle peut être omise. deprecationDeprecationSpécifie si cet attribut est obsolète. Si ce champ n'est pas obsolète, ou si cette information n'est pas connue, elle peut être omise. Le tableau suivant fournit plus de détails sur l'attribut de dépréciation.
NomTypeObjectif
Propriétés des indices
L'objet JSON contenu dans le tableau des indices peut contenir les propriétés du tableau ci-dessous.

NomTypeObjectif#🎜🎜 #namevaluesL'objet JSON contenu dans l'attribut valeurs de chaque élément d'indice peut contenir les propriétés décrites dans le tableau suivant.
StringLe nom complet de la propriété pointée par cette astuce. Le nom est en minuscules, séparés par des points (comme spring.mvc.servlet.path). Cet attribut est obligatoire.
ValueHint[]La liste des valeurs valides définies par l'objet ValueHint (décrit dans le tableau suivant). Chaque entrée a une valeur définie et peut avoir une description.

NomvalueObjectUne valeur valide pour l'élément pointé par l'indice. Si le type de la propriété est un tableau, il peut également s'agir d'une valeur de tableau. Cet attribut est obligatoire. descriptionStringUne brève description de la valeur qui peut être affichée à l'utilisateur. S'il n'y a pas de description, elle peut être omise. La dernière ligne de la description doit se terminer par un point (.).

SpringBoot命令行参数

参考:https://www.yisu.com/article/191629.htm

启动Spring Boot项目时传递参数,有三种参数形式:

  • 选项参数,基本格式为--optName[=optValue]--为连续两个减号)

--foo
--foo=bar
--foo="bar then baz"
--foo=bar,baz,biz
Copier après la connexion
  • 非选项参数

java -jar xxx.jar abc def

  • 系统参数

java -jar -Dserver.port=8081 xxx.jar

相当于 SpringBoot 基于 Java 命令行参数中的非选项参数自定义了选项参数的规则,具体可以看解析器SimpleCommandLineArgsParser,它里面调用其parse方法对参数进行解析

class SimpleCommandLineArgsParser {
    public CommandLineArgs parse(String... args) {
        CommandLineArgs commandLineArgs = new CommandLineArgs();
        for (String arg : args) {
            // --开头的选参数解析
            if (arg.startsWith("--")) {
                // 获得key=value或key值
                String optionText = arg.substring(2, arg.length());
                String optionName;
                String optionValue = null;
                // 如果是key=value格式则进行解析
                if (optionText.contains("=")) {
                    optionName = optionText.substring(0, optionText.indexOf(&#39;=&#39;));
                    optionValue = optionText.substring(optionText.indexOf(&#39;=&#39;)+1, optionText.length());
                } else {
                    // 如果是仅有key(--foo)则获取其值
                    optionName = optionText;
                }
                // 如果optionName为空或者optionValue不为空但optionName为空则抛出异常
                if (optionName.isEmpty() || (optionValue != null && optionValue.isEmpty())) {
                    throw new IllegalArgumentException("Invalid argument syntax: " + arg);
                }
                // 封装入CommandLineArgs
                commandLineArgs.addOptionArg(optionName, optionValue);
            } else {
                commandLineArgs.addNonOptionArg(arg);
            }
        }
        return commandLineArgs;
    }
}
Copier après la connexion

参数值的获取

如果您需要访问传递给应用程序的参数SpringApplication.run(&hellip;),您可以注入一个ApplicationArguments。该ApplicationArguments接口提供对原始String[]参数以及选项参数和非选项参数的访问,如以下示例所示:

@Component
public class MyBean {
    @Autowired
    public MyBean(ApplicationArguments args) {
        boolean debug = args.containsOption("debug");
        List<String> files = args.getNonOptionArgs();
        // if run with "--debug logfile.txt" debug=true, files=["logfile.txt"]
    }
}
Copier après la connexion
  • 另外,选项参数,也可以直接通过@Value在类中获取

  • 系统参数可以通过java.lang.System提供的方法获取

参数值的区别

关于参数值区别,重点看选项参数和系统参数。通过上面的示例我们已经发现使用选项参数时,参数在命令中是位于xxx.jar之后传递的,而系统参数是紧随java -jar之后。

如果不按照该顺序进行执行,比如使用如下方式使用选项参数:

java -jar --server.port=8081 xxx.jar
Copier après la connexion

则会抛出如下异常:

Unrecognized option: --server.port=8081
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Copier après la connexion

如果将系统参数放在jar包后面,问题会更严重,会出现可以正常启动,但参数无法生效。这个错误是最坑的,所以一定谨记:通过-D传递系统参数时,务必放置在待执行的jar包之前。

扩展“外部化配置”属性源

Comment configurer lexternalisation SpringBoot

Comment configurer lexternalisation SpringBoot

SpingBoot怎么支持YAML配置文件解析?

处理@PropertySource注解从ConfigurationClassParser#processPropertySource方法进

Spring中@PropertySource默认不支持YAML格式的解析,但是SpringBoot的配置文件却可以解析YAML,这说明SpringBoot中已经实现了YAML文件的解析,我们只需要复用即可,我们可以看该注解源码

/**
 * Specify a custom {@link PropertySourceFactory}, if any.
 * <p>By default, a default factory for standard resource files will be used.
 * @since 4.3
 * @see org.springframework.core.io.support.DefaultPropertySourceFactory
 * @see org.springframework.core.io.support.ResourcePropertySource
 */
Class<? extends PropertySourceFactory> factory() default PropertySourceFactory.class;
Copier après la connexion

PropertySourceFactory的默认实现是DefaultPropertySourceFactory

public class DefaultPropertySourceFactory implements PropertySourceFactory {
	@Override
	public PropertySource<?> createPropertySource(@Nullable String name, EncodedResource resource) throws IOException {
		return (name != null ? new ResourcePropertySource(name, resource) : new ResourcePropertySource(resource));
	}
}
Copier après la connexion

ResourcePropertySource默认不支持YAML,所以我们可以通过实现PropertySourceFactory接口,然后用@PropertySource的factory属性来实现YAML的解析

public class YamlPropertySourceFactory implements PropertySourceFactory {
    @Override
    public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
        YamlPropertiesFactoryBean yamlPropertiesFactoryBean = new YamlPropertiesFactoryBean();
        yamlPropertiesFactoryBean.setResources(resource.getResource());
        Properties yamlProperties = yamlPropertiesFactoryBean.getObject();
        return new PropertiesPropertySource(name, yamlProperties);
    }
}
Copier après la connexion

关于ApplicationEnvironmentPreparedEvent没有被执行的原因

官方文档中有说到:有些事件实际上是在ApplicationContext被创建之前触发的,所以我们不能将这些事件的监听器注册为@Bean。

因为这个时候应用上下文还没有被创建,也就是说监听器也还没有被初始化,这个先后顺序不对,会导致这些事件的监听器不会被触发

但可以使用SpringApplication.addListeners(...) 方法或SpringApplicationBuilder.listeners(...) 方法注册它们。

如果您希望这些侦听器自动注册的话,可以通过新建一个META-INF/spring.factories文件,添加类似以下内容,SpringBoot会自动帮你注册。

org.springframework.context.ApplicationListener=com.example.project.MyListener
Copier après la connexion
应用程序事件

应用程序运行时,应用程序事件按以下顺序发送:

  • An ApplicationStartingEvent is sent at the start of a run but before any processing, except for the registration of listeners and initializers.

  • An ApplicationEnvironmentPreparedEvent is sent when the Environment to be used in the context is known but before the context is created.

  • An ApplicationContextInitializedEvent is sent when the ApplicationContext is prepared and ApplicationContextInitializers have been called but before any bean definitions are loaded.

  • An ApplicationPreparedEvent is sent just before the refresh is started but after bean definitions have been loaded.

  • An ApplicationStartedEvent is sent after the context has been refreshed but before any application and command-line runners have been called.

  • An AvailabilityChangeEvent is sent right after with LivenessState.CORRECT to indicate that the application is considered as live.

  • An ApplicationReadyEvent is sent after any application and command-line runners have been called.

  • Un AvailabilityChangeEvent est envoyé juste après avec ReadinessState.ACCEPTING_TRAFFIC pour indiquer que l'application est prête à répondre aux demandes.

  • Un ApplicationFailedEvent est envoyé s'il y a une exception au démarrage.

La liste ci-dessus n'inclut que SpringApplicationEvents qui sont liés à une SpringApplication. En plus de ceux-ci, les événements suivants sont également publiés après ApplicationPreparedEvent et avant ApplicationStartedEvent :

  • Un WebServerInitializedEvent est envoyé une fois que le serveur Web est prêt. ServletWebServerInitializedEvent et ReactiveWebServerInitializedEvent sont respectivement les variantes servlet et réactive.

  • Un ContextRefreshedEvent est envoyé lorsqu'un ApplicationContext est actualisé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
TypeObjectif#🎜🎜 #