[JAVA] Priorité de réglage externe Spring Boot

Aperçu

Traduction en japonais

Paramètres externes

Spring Boot peut être externalisé afin que le même code d'application puisse s'exécuter dans différents environnements. Vous pouvez externaliser vos paramètres à l'aide de fichiers de propriétés, de fichiers YAML, de variables d'environnement et d'arguments de ligne de commande. Les paramètres peuvent être injectés directement dans le bean à l'aide de l'annotation @Value, accessibles via Spring's Environment ou liés à un objet structuré via @ConfigurationProperties.

Spring Boot utilise un mécanisme de commande spécial appelé PropertySource. Il est conçu pour permettre l'écrasement flexible des paramètres.

Les paramètres sont appliqués dans l'ordre de priorité suivant:

  1. Propriétés de configuration globale de Devtools dans votre répertoire personnel (~ /.spring-boot-devtools.properties si devtools est actif).
  2. Testez l'annotation @TestPropertySource.
  3. Testez les attributs de propriété. Il peut être utilisé avec @SpringBootTest et des annotations de test pour tester des parties spécifiques de l'application.
  4. Arguments de ligne de commande.
  5. Propriétés définies sur SPRING_APPLICATION_JSON (JSON en ligne intégré dans les variables d'environnement et les propriétés système).
  6. Paramètres d'initialisation de ServletConfig.
  7. Paramètres d'initialisation de ServletContext.
  8. Attribut JNDI dérivé de java: comp / env.
  9. Propriétés système Java (System.getProperties ()).
  10. Variables d'environnement du système d'exploitation
  11. RandomValuePropertySource qui n'a que des propriétés aléatoires. *.
  12. Propriétés de l'application (application- {profile} .properties et YAML) qui sont pour un profil particulier et ne sont pas empaquetées dans JAR.
  13. Propriétés d'application (application- {profile} .properties et YAML) qui sont empaquetées dans le JAR pour un profil particulier.
  14. Propriétés d'application (application.properties et YAML) qui ne sont pas incluses dans le JAR.
  15. Propriétés de l'application (application.properties et YAML) empaquetées dans le JAR.
  16. Annotation @PropertySource de la classe @Configuration.
  17. Propriétés par défaut (paramètres spécifiés dans SpringApplication.setDefaultProperties).

Original (anglais)

4.2. Externalized Configuration

Spring Boot lets you externalize your configuration so that you can work with the same application code in different environments. You can use properties files, YAML files, environment variables, and command-line arguments to externalize configuration. Property values can be injected directly into your beans by using the @Value annotation, accessed through Spring’s Environment abstraction, or be bound to structured objects through @ConfigurationProperties.

Spring Boot uses a very particular PropertySource order that is designed to allow sensible overriding of values. Properties are considered in the following order:

  1. Devtools global settings properties on your home directory (~/.spring-boot-devtools.properties when devtools is active).
  2. @TestPropertySource annotations on your tests.
  3. properties attribute on your tests. Available on @SpringBootTest and the test annotations for testing a particular slice of your application.
  4. Command line arguments.
  5. Properties from SPRING_APPLICATION_JSON (inline JSON embedded in an environment variable or system property).
  6. ServletConfig init parameters.
  7. ServletContext init parameters.
  8. JNDI attributes from java:comp/env.
  9. Java System properties (System.getProperties()).
  10. OS environment variables.
  11. A RandomValuePropertySource that has properties only in random.*.
  12. Profile-specific application properties outside of your packaged jar (application-{profile}.properties and YAML variants).
  13. Profile-specific application properties packaged inside your jar (application-{profile}.properties and YAML variants).
  14. Application properties outside of your packaged jar (application.properties and YAML variants).
  15. Application properties packaged inside your jar (application.properties and YAML variants).
  16. @PropertySource annotations on your @Configuration classes.
  17. Default properties (specified by setting SpringApplication.setDefaultProperties).

Contrôle de fonctionnement pour l'ordre de priorité

Exécutez l'exemple de code pour voir la priorité.

application.properties

Décrivez la valeur du paramètre dans application.properties.

message=Hello, application.properties!

Application.java

package sample;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
}

Controller.java

Le message de valeur de paramètre est renvoyé en JSON.

package sample;

import java.util.HashMap;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Controller {

  @Value("${message}")
  private String message;

  @RequestMapping("/")
  public HashMap<String, Object> index() {
    return new HashMap<String, Object>() {
      {
        put("message", message);
      }
    };
  }
}

Exemple où application.properties est appliqué

Exécutez le serveur Spring Boot avec la commande java.

$ java -jar target/sample.jar

Lors de l'accès au serveur, la valeur de paramètre de message décrite dans application.properties est renvoyée.

$ curl http://localhost:8080/
{"message":"Hello, application.properties!"}

Exemple d'application des propriétés système Java

Utilisez -D pour spécifier JSON dans la propriété système Java spring.application.json et exécutez le serveur Spring Boot avec la commande java.

$ java -Dspring.application.json='{"message":"Hello, Java System properties!"}' -jar target/sample.jar

L'accès au serveur renvoie le paramètre de message spécifié dans les propriétés système Java.

$ curl http://localhost:8080/
{"message":"Hello, Java System properties!"}

Les propriétés système Java ont priorité sur application.properties. En effet, les 9e et 15e priorités de la liste précédente sont plus élevées que la 9e. "9. Propriétés système Java (System.getProperties ())." "15. Propriétés d'application empaquetées dans JAR (application- {profile} .properties et YAML)."

Recommended Posts

Priorité de réglage externe Spring Boot
Priorité d'accès aux fichiers statiques dans Spring Boot
Défi Spring Boot
Forme de botte de printemps
Résumé des paramètres initiaux pour Spring Boot, Doma2, Gradle
Spring Boot Rappelez-vous
gae + botte à ressort
Fiche d'apprentissage SPRING BOOT 01
Botte de printemps + Heroku Postgres
Rédaction de mémo de démarrage de printemps (1)
Première botte à ressort (DI)
Aide-mémoire Spring Boot2
Mappage du servlet Spring Boot
Procédure d'apprentissage Spring Boot
Rédaction de mémos de démarrage de printemps (2)
[Spring Boot] DataSourceProperties $ DataSourceBeanCreationException
Disponibilité de l'application Spring Boot 2.3
Tutoriels Spring Boot Sujets
Télécharger avec Spring Boot
Inclure le pot externe dans le package avec Spring boot2 + Maven3
[Spring Boot] Construction de l'environnement (macOS)
Définir le paramètre contextuel dans Spring Boot
Méthode de configuration de la connexion Spring + MyBatis
Essayez Spring Boot de 0 à 100.
Générer un code à barres avec Spring Boot
Hello World avec Spring Boot
Spring Boot sur Microsoft Azure
Implémenter GraphQL avec Spring Boot
Paramètre Spring RestTemplate Config Timeout
Démarrez avec Spring Boot
Bonjour tout le monde avec Spring Boot!
Multi-projets Spring Boot 2 avec Gradle
[Spring Boot] Création d'applications Web
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
Paramètres d'échange à chaud Spring Boot
[Java] Thymeleaf Basic (Spring Boot)
Introduction à Spring Boot ① ~ DI ~
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Application Java CICS-Run - (4) Application Spring Boot
Spring Boot à partir de Docker
Spring Boot + Springfox springfox-boot-starter 3.0.0 Utilisation
Conseils relatifs à Spring Boot DB
Hello World avec Spring Boot
Définir des cookies avec Spring Boot
[Spring Boot] Recette de processus de pagination facile
Utiliser Spring JDBC avec Spring Boot
Construction de l'environnement Docker × Spring Boot
Changements majeurs dans Spring Boot 1.5
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
NoHttpResponseException dans Spring Boot + WireMock
[Spring Boot] Envoyer un e-mail
Paramètres liés aux performances de Spring Boot
Introduction à Spring Boot, partie 1
Essayez d'utiliser Spring Boot Security
[Java] [Spring] Spring Boot 1.4-> 1.2 Note de rétrogradation
Essayez Spring Boot sur Mac
Créer un micro service avec Spring Boot