[JAVA] Changer d'environnement avec Spring Boot application.properties et l'annotation @Profile

Aperçu

Liste des codes sources

$ tree src
src
├── main
│   ├── java
│   │   └── info
│   │       └── maigo
│   │           └── lab
│   │               └── sample
│   │                   └── profiles
│   │                       ├── MyData.java
│   │                       ├── MyDataForDefault.java
│   │                       ├── MyDataForDevelopment.java
│   │                       ├── MyDataForTestAndProduction.java
│   │                       ├── MyRestController.java
│   │                       └── ProfilesApplication.java (← Cette fois, le contenu est omis)
│   └── resources
│       ├── application-development.properties
│       ├── application-production.properties
│       ├── application-test.properties
│       └── application.properties

Code source pour la partie de base

MyRestController.java

Injectez des objets MyData avec la fonction DI de Spring Framework. Écrivez l'annotation @Autowired dans la variable d'instance myData. Rend les informations MyData renvoyées dans JSON lors de l'accès à http: // localhost: 8080 /.

package info.maigo.lab.sample.profiles;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyRestController {

    @Autowired
    private MyData myData;

    @RequestMapping("/")
    public MyData index() {
        return myData;
    }
}

MyData.java

Définition d'interface pour l'objet MyData. Aucune méthode n'est préparée cette fois.

package info.maigo.lab.sample.profiles;

public interface MyData {
}

MyDataForDefault.java

La classe d'implémentation MyData utilisée dans le profil par défaut. Vous pouvez spécifier le profil lors de la DI avec l'annotation @Profile. Ici, la valeur par défaut est spécifiée. Attribuez la chaîne de caractères "par défaut" au profil de variable d'instance. Attribuez message.value de application.properties au message de la variable d'instance.

package info.maigo.lab.sample.profiles;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;

@Component
@Profile("default")
public class MyDataForDefault implements MyData {

    public String profile = "default";

    @Value("${message.value}")
    public String message;
}

application.properties

fichier de propriétés utilisé dans le profil par défaut.

message.value=Hello, default!

Commencez avec le profil par défaut

Spécifiez le fichier JAR créé lors de la construction et démarrez-le. Aucun paramètre n'est ajouté pour spécifier le profil.

$ java -jar target/profiles-0.0.1-SNAPSHOT.jar

Lorsque vous accédez au serveur démarré, vous pouvez voir que les informations du profil par défaut sont chargées.

$ curl http://localhost:8080/
{"profile":"default","message":"Hello, default!"}

Code source utilisé dans le profil de développement

MyDataForDevelopment.java

La classe d'implémentation MyData utilisée dans le profil de développement. Spécifiez le profil de développement avec l'annotation @Profile. Attribuez la chaîne "development" au profil de variable d'instance. Affectez message.value de application-development.properties au message de variable d'instance.

package info.maigo.lab.sample.profiles;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;

@Component
@Profile("development")
public class MyDataForDevelopment implements MyData {

    public String profile = "development";

    @Value("${message.value}")
    public String message;
}

application-development.properties

Fichier de propriétés utilisé dans le profil de développement.

message.value=Hello, development!

Commencez par spécifier le profil de développement

Spécifiez le développement dans le paramètre JVM -Dspring.profiles.active.

$ java -Dspring.profiles.active=development -jar target/profiles-0.0.1-SNAPSHOT.jar

Lorsque vous accédez au serveur démarré, vous pouvez voir que les informations du profil de développement sont chargées.

$ curl http://localhost:8080/
{"profile":"development","message":"Hello, development!"}

Code source utilisé dans les profils de test et de production

MyDataForTestAndProduction.java

La classe d'implémentation MyData utilisée dans les profils de test et de production. Le test et la production sont spécifiés dans l'annotation @Profile. Les objets de cette classe sont soumis à DI lorsque l'un des profils spécifiés est spécifié. Le profil JSON renvoyé par @RestController est généré par la méthode getProfile de cette classe. Vous pouvez obtenir plusieurs noms de profil spécifiés par Environment # getActiveProfiles.

package info.maigo.lab.sample.profiles;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Profile;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

@Component
@Profile({"test", "production"})
public class MyDataForTestAndProduction implements MyData {

    @Autowired
    private Environment env;

    public String getProfile() {
        return String.join(",", env.getActiveProfiles());
    }

    @Value("${message.value}")
    public String message;
}

application-test.properties

Fichier de propriétés utilisé dans le profil de test.

message.value=Hello, test!

application-production.properties

Fichier de propriétés utilisé dans le profil de production.

message.value=Hello, production!

Commencez par spécifier le profil de test

Spécifiez le test pour le paramètre JVM -Dspring.profiles.active.

$ java -Dspring.profiles.active=test -jar target/profiles-0.0.1-SNAPSHOT.jar

Lorsque vous accédez au serveur démarré, vous pouvez voir que les informations du profil de test sont chargées.

$ curl http://localhost:8080/
{"message":"Hello, test!","profile":"test"}

Commencez par spécifier le profil de production

Spécifiez la production dans le paramètre JVM -Dspring.profiles.active.

$ java -Dspring.profiles.active=production -jar target/profiles-0.0.1-SNAPSHOT.jar

Lorsque vous accédez au serveur démarré, vous pouvez voir que les informations du profil de production sont chargées.

$ curl http://localhost:8080/
{"message":"Hello, production!","profile":"production"}

Lancer avec plusieurs profils de test et de production

Spécifiez plusieurs profils "test, production" séparés par des virgules dans le paramètre JVM -Dspring.profiles.active.

$ java -Dspring.profiles.active=test,production -jar target/profiles-0.0.1-SNAPSHOT.jar

Lorsque vous accédez au serveur démarré, vous pouvez voir que les informations de profil de test et de production sont lues car la valeur de l'élément de profil contient "test, production".

$ curl http://localhost:8080/
{"message":"Hello, production!","profile":"test,production"}

La valeur de message.value définie dans application-test.properties et application-production.properties est le résultat du conflit. La valeur de application-production.properties est prioritaire (il est considéré que la valeur en conflit ne doit pas être définie). ..

Lorsque j'ai essayé de spécifier "production, test" dans l'ordre inverse de la spécification du profil, la valeur de application-test.properties a été priorisée.

$ java -Dspring.profiles.active=production,test -jar target/profiles-0.0.1-SNAPSHOT.jar
$ curl http://localhost:8080/
{"message":"Hello, test!","profile":"production,test"}

Peut-être que le profil que vous spécifiez plus tard aura la priorité (écraser?).

Cet environnement

Matériel de référence

Recommended Posts

Changer d'environnement avec Spring Boot application.properties et l'annotation @Profile
Fonction de profil Spring et application Spring Boot.
Changer d'environnement avec l'argument de démarrage dans SpringBoot
HTTPS avec Spring Boot et Let's Encrypt
À propos de la conception de Spring Boot et de l'environnement de test unitaire
Créez des projets Spring Boot par environnement avec Gradle
Créer un environnement Spring Boot avec Windows + VS Code
Créer un environnement de développement Spring Boot avec docker
Environnement de développement-développement Spring Boot-
Télécharger avec Spring Boot
Essayez d'utiliser un conteneur DI avec Laravel et Spring Boot
[Java] [Spring Boot] Spécifier le profil d'exécution --Spring Boot à partir de NetBeans
Mémo d'utilisation de Spring Security: coopération avec Spring MVC et Boot
Spring Boot avec les paramètres du filtre de sécurité Spring et les points addictifs
SSO avec GitHub OAuth dans l'environnement Spring Boot 1.5.x
Comment démarrer par environnement avec Spring Boot de Maven
Tentative de SSR Vue.js avec Spring Boot et GraalJS
Création d'un environnement de base de données avec Docker dans Spring Boot (IntellJ)
Connectez Spring Boot et Angular en toute sécurité avec OpenAPI Generator
[Spring Boot] Construction de l'environnement (macOS)
Générer un code à barres avec Spring Boot
Hello World avec Spring Boot
Implémenter GraphQL avec Spring Boot
Démarrez avec Spring Boot
Bonjour tout le monde avec Spring Boot!
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Spring Boot à partir de Docker
Hello World avec Spring Boot
Définir des cookies avec Spring Boot
Utiliser Spring JDBC avec Spring Boot
Construction de l'environnement Docker × Spring Boot
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
Créer un micro service avec Spring Boot
Envoyer du courrier avec Spring Boot
Spring Boot pour l'apprentissage des annotations
Changez la cible d'injection pour chaque environnement avec Spring Boot 2
Gérez l'API de date et d'heure Java 8 avec Thymeleaf avec Spring Boot
Implémenter l'API REST avec Spring Boot et JPA (Application Layer)
Implémenter l'API REST avec Spring Boot et JPA (couche d'infrastructure)
Jusqu'à INSERT et SELECT sur Postgres avec botte de printemps et feuille de thym
Connectez-vous à la base de données avec spring boot + spring jpa et effectuez l'opération CRUD
Implémenter l'API REST avec Spring Boot et JPA (Domain Layer Edition)
Développement piloté par domaine avec Java et Spring Boot-Layer et division de modules
Diverses applications de commutation.properties pour chaque environnement au démarrage de Spring Boot
Développement facile d'applications Web avec STS et Spring Boot. Dans 10 minutes.
Utiliser l'authentification de base avec Spring Boot
◆ Spring Boot + note de construction de l'environnement gradle
gRPC sur Spring Boot avec grpc-spring-boot-starter
Définir le profil Spring lors de l'exécution de la tâche bootRun avec Spring Boot Gradle Plugin
Créez une application avec Spring Boot 2
Déploiement à chaud avec le développement Spring Boot
Liaison de base de données avec doma2 (Spring boot)
Programmation Spring Boot avec VS Code
Jusqu'à "Hello World" avec Spring Boot
Créer une application d'enquête avec Spring Boot
Obtenez des résultats de validation avec Spring Boot