[JAVA] Wechseln Sie die Umgebung mit Spring Boot application.properties und @ Profile-Annotation

Überblick

Quellcodeliste

$ tree src
src
├── main
│   ├── java
│   │   └── info
│   │       └── maigo
│   │           └── lab
│   │               └── sample
│   │                   └── profiles
│   │                       ├── MyData.java
│   │                       ├── MyDataForDefault.java
│   │                       ├── MyDataForDevelopment.java
│   │                       ├── MyDataForTestAndProduction.java
│   │                       ├── MyRestController.java
│   │                       └── ProfilesApplication.java (← Diesmal wird der Inhalt weggelassen)
│   └── resources
│       ├── application-development.properties
│       ├── application-production.properties
│       ├── application-test.properties
│       └── application.properties

Quellcode für den Basisteil

MyRestController.java

Injizieren Sie MyData-Objekte mit der DI-Funktion des Spring Framework. Schreiben Sie die Annotation @Autowired in die Instanzvariable myData. Lässt MyData-Informationen in JSON zurückgeben, wenn auf http: // localhost: 8080 / zugegriffen wird.

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

Schnittstellendefinition für das MyData-Objekt. Diesmal ist keine Methode vorbereitet.

package info.maigo.lab.sample.profiles;

public interface MyData {
}

MyDataForDefault.java

Die im Standardprofil verwendete MyData-Implementierungsklasse. Sie können das Profil bei DI mit der Annotation @Profile angeben. Hier wird die Standardeinstellung angegeben. Weisen Sie dem Instanzvariablenprofil die Zeichenfolge "default" zu. Weisen Sie der Instanzvariablennachricht den Nachrichtenwert von application.properties zu.

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

Eigenschaftendatei, die im Standardprofil verwendet wird.

message.value=Hello, default!

Beginnen Sie mit dem Standardprofil

Geben Sie die durch das Erstellen erstellte JAR-Datei an und starten Sie sie. Es werden keine Parameter hinzugefügt, um das Profil anzugeben.

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

Wenn Sie auf den gestarteten Server zugreifen, können Sie sehen, dass die Informationen des Standardprofils geladen sind.

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

Quellcode, der im Entwicklungsprofil verwendet wird

MyDataForDevelopment.java

Die im Entwicklungsprofil verwendete MyData-Implementierungsklasse. Geben Sie das Entwicklungsprofil mit der Annotation @Profile an. Weisen Sie dem Instanzvariablenprofil die Zeichenfolge "Entwicklung" zu. Weisen Sie der Instanzvariablennachricht message.value von application-development.properties zu.

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

Im Entwicklungsprofil verwendete Eigenschaftendatei.

message.value=Hello, development!

Geben Sie zunächst das Entwicklungsprofil an

Geben Sie die Entwicklung im JVM-Parameter -Dspring.profiles.active an.

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

Wenn Sie auf den gestarteten Server zugreifen, können Sie sehen, dass die Informationen zum Entwicklungsprofil geladen sind.

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

Quellcode, der in Test- und Produktionsprofilen verwendet wird

MyDataForTestAndProduction.java

Die in den Test- und Produktionsprofilen verwendete MyData-Implementierungsklasse. Test und Produktion sind in der Annotation @Profile angegeben. Objekte dieser Klasse unterliegen DI, wenn eines der angegebenen Profile angegeben wird. Das von @RestController zurückgegebene JSON-Profil wird von der getProfile-Methode dieser Klasse generiert. Sie können mehrere Profilnamen abrufen, die von Environment # getActiveProfiles angegeben werden.

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

Im Testprofil verwendete Eigenschaftendatei.

message.value=Hello, test!

application-production.properties

Im Produktionsprofil verwendete Eigenschaftendatei.

message.value=Hello, production!

Geben Sie zunächst das Testprofil an

Geben Sie einen Test für den JVM-Parameter -Dspring.profiles.active an.

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

Wenn Sie auf den gestarteten Server zugreifen, können Sie sehen, dass die Testprofilinformationen geladen sind.

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

Geben Sie zunächst das Produktionsprofil an

Geben Sie die Produktion im JVM-Parameter -Dspring.profiles.active an.

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

Wenn Sie auf den gestarteten Server zugreifen, können Sie sehen, dass die Produktionsprofilinformationen geladen sind.

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

Starten Sie mit mehreren Profilen Test und Produktion

Geben Sie im JVM-Parameter -Dspring.profiles.active mehrere durch Kommas getrennte Profile "Test, Produktion" an.

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

Wenn Sie auf den gestarteten Server zugreifen, können Sie sehen, dass die Profilinformationen von Test und Produktion gelesen werden, da der Wert des Profilelements "Test, Produktion" enthält.

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

Der in application-test.properties und application-production.properties definierte Wert von message.value ist das Ergebnis des Konflikts. Der Wert von application-production.properties wird priorisiert (es wird davon ausgegangen, dass der zu konfliktierende Wert nicht festgelegt werden sollte). ..

Als ich versuchte, "Produktion, Test" in umgekehrter Reihenfolge der Profilspezifikation anzugeben, wurde der Wert von application-test.properties priorisiert.

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

Möglicherweise hat das später angegebene Profil Vorrang (überschreiben?).

Diese Umgebung

Referenzmaterial

Recommended Posts

Wechseln Sie die Umgebung mit Spring Boot application.properties und @ Profile-Annotation
Spring-Profilfunktion und Spring Boot application.properties
Wechseln Sie die Umgebung mit dem Boot-Argument in SpringBoot
HTTPS mit Spring Boot und Let's Encrypt
Informationen zum Entwerfen einer Spring Boot- und Unit-Test-Umgebung
Erstellen Sie mit Gradle Spring Boot-Projekte nach Umgebung
Erstellen Sie eine Spring Boot-Umgebung mit Windows + VS-Code
Erstellen Sie mit Docker eine Spring Boot-Entwicklungsumgebung
Spring Boot Entwicklung-Entwicklungsumgebung-
Mit Spring Boot herunterladen
Versuchen Sie es mit einem DI-Container mit Laravel und Spring Boot
[Java] [Spring Boot] Geben Sie das Laufzeitprofil an - Spring Boot beginnend mit NetBeans
Verwendungshinweis zu Spring Security: Zusammenarbeit mit Spring MVC und Boot
Spring Boot mit Spring Security Filter-Einstellungen und Suchtpunkten
SSO mit GitHub OAuth in der Spring Boot 1.5.x-Umgebung
Booten nach Umgebung mit Spring Boot of Maven
Versuch, SSR Vue.js mit Spring Boot und GraalJS zu verwenden
Erstellen einer Datenbankumgebung mit Docker in Spring Boot (IntellJ)
Verbinden Sie Spring Boot und Angular typsicher mit OpenAPI Generator
[Spring Boot] Umgebungskonstruktion (macOS)
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Implementieren Sie GraphQL mit Spring Boot
Beginnen Sie mit Spring Boot
Hallo Welt mit Spring Boot!
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Spring Boot beginnend mit Docker
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Aufbau der Docker x Spring Boot-Umgebung
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Spring Boot zum Lernen von Anmerkungen
Ändern Sie das Injektionsziel für jede Umgebung mit Spring Boot 2
Behandeln Sie die Java 8-Datums- und Uhrzeit-API mit Thymeleaf mit Spring Boot
Implementieren Sie die REST-API mit Spring Boot und JPA (Application Layer).
Implementieren Sie die REST-API mit Spring Boot und JPA (Infrastructure Layer).
Bis INSERT und SELECT für Postgres mit Spring Boot und Thymianblatt
Stellen Sie mit spring boot + spring jpa eine Verbindung zur Datenbank her und führen Sie die CRUD-Operation durch
Implementieren Sie die REST-API mit Spring Boot und JPA (Domain Layer Edition).
Domänengesteuerte Entwicklung mit Java und Spring Boot-Layer und Modulabteilung
Verschiedene Switching Application.Eigenschaften für jede Umgebung, wenn Spring Boot gestartet wird
Einfache Entwicklung von Webanwendungen mit STS und Spring Boot. In 10 Minuten.
Verwenden Sie die Standardauthentifizierung mit Spring Boot
◆ Konstruktionsnotiz für Spring Boot + Gradle-Umgebung
gRPC auf Spring Boot mit grpc-spring-boot-Starter
Legen Sie das Spring-Profil fest, wenn Sie die bootRun-Task mit dem Spring Boot Gradle Plugin ausführen
Erstellen Sie eine App mit Spring Boot 2
Hot Deploy mit Spring Boot-Entwicklung
Datenbankverknüpfung mit doma2 (Spring Boot)
Spring Boot Programmierung mit VS Code
Bis "Hallo Welt" mit Spring Boot
Erstellen Sie eine Anfrage-App mit Spring Boot
Erhalten Sie Validierungsergebnisse mit Spring Boot