Es gibt verschiedene Möglichkeiten, einen Build auf Gradle nach Umgebung auszuführen. Dieses Mal werde ich vorstellen, wie die War-Datei ausgegeben wird, nachdem die Einstellungen von application.properties von Spring Boot neu geschrieben wurden.
Das verwendete Entwicklungstool ist STS, und es wird davon ausgegangen, dass Gradle Buildship funktioniert.
Schließlich wurde der vom roten Rahmen umgebene Teil zu Gradle Tasks hinzugefügt. Durch Ausführen können Sie die War-Datei für jede Umgebung ausgeben.
Spring Initializr So erstellen Sie eine Vorlage für das Projekt. Wählen Sie Gradle Project in Project aus, wählen Sie Packaging aus und klicken Sie zum Herunterladen auf die Schaltfläche Generate. Dieses Mal werden wir davon ausgehen, dass Krieg produziert wird.
Entpacken Sie nach dem Herunterladen die Zip-Datei Importieren Sie es als Gradle-Projekt in STS.
demo
│ build.gradle //Fügen Sie hier ein Build-Skript hinzu
│ application_template.properties //Erstelle eine neue
│
├─.gradle
├─.settings
├─bin
├─gradle
└─src
├─main
│ ├─java
│ │ └─com
│ │ └─example
│ │ └─demo
│ │ DemoApplication.java //Reparieren
│ │
│ └─resources
│ application-dev.properties //Erstelle eine neue
│ application-product.properties //Erstelle eine neue
│ application.properties //Reparieren
│
└─test
Bereiten Sie in Spring Boot eine Datei mit dem Namen application-environment name.properties vor Sie können die Einstellungen für jede Umgebung anwenden, indem Sie den Umgebungsnamen in application.properties festlegen. Bereiten Sie daher die folgenden drei Dateien unter Ressourcen vor.
application.properties
spring.profiles.active=dev
application-dev.properties
sample_data=Development Environment
application-product.properties
sample_data=Production Environment
Dieses Mal werde ich eine sehr einfache Anwendung ausführen, die den Inhalt der Einstellungsdatei für jede Umgebung anzeigt. Schreiben wir Application.java wie folgt um.
DemoApplication.java
package com.example.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class DemoApplication {
@Value("${sample_data}")
private String data; //Dieser Wert ist das Beispiel der Einstellungsdatei_Lesen Sie aus dem Wert der Daten
public static void main(String[] args) {
ConfigurableApplicationContext ctx = SpringApplication.run(DemoApplication.class, args);
DemoApplication demo = ctx.getBean(DemoApplication.class);
demo.run();
}
private void run() {
System.out.println(data);
}
}
Bei der Ausführung sollte die in application.properties festgelegte Datei gelesen und der der Umgebung entsprechende Wert angezeigt werden.
Ausführungsergebnis (Federprotokoll weggelassen)
Development Environment
Führen Sie dieses Mal die Aufgabe für jede Umgebung in der Ansicht "Gradle Tasks" von STS aus und geben Sie den Krieg aus. Führen Sie zunächst den Vorgang zum Ersetzen von application.properties durch die aus, für die die zu erstellende Umgebung festgelegt ist. Lassen Sie uns die folgende Vorlagendatei application.properties erstellen.
application_template.properties
spring.profiles.active=${buildEnv}
Schreiben Sie als Nächstes eine Aufgabe, um application.properties mit einer Datei zu überschreiben, die den $ {buildEnv} -Teil der Vorlagendatei ersetzt. Fügen wir es zu build.gradle hinzu. Da wir dieses Mal den Befehl war verwenden, vergessen Sie nicht, die Einstellungen des Befehls war zu beschreiben.
build.gradle
plugins {
// (Unterlassung)
}
//Kriegsbefehlseinstellungen hinzugefügt
war {
enabled = true
archiveName 'sample.war'
}
// (Unterlassung)
//Jeder Dateiname
def templateFile = 'application_template.properties'
def configFile = 'application.properties'
//Name der Zielumgebung (ersetzen Sie später einen Wert)
def targetEnv = ''
task replaceConfig {
description 'Replace application.properties environment.'
doLast {
println ' start replacing :' + targetEnv
//Ausführungsteil kopieren
copy {
// from:Geben Sie das Verzeichnis an, das die zu kopierenden Dateien enthält
from '.'
// include:Dieses Mal gebe ich den zu kopierenden Dateinamen an
include templateFile
// into:Zielverzeichnis kopieren
into 'src/main/resources'
// application.In Eigenschaften umbenennen
rename(templateFile, configFile)
// ${buildEnv}Ersetzen
expand([
buildEnv: targetEnv
])
println " replacing finished"
}
}
//Wenn die Ersetzungsaufgabe abgeschlossen ist, verwenden Sie den Befehl war, um war auszugeben (wenn es sich um eine JAR-Datei handelt, machen Sie sie zu einem JAR).
finalizedBy {
war
}
}
Die Kriegsaufgabe wird nun ausgeführt, nachdem der Kopiervorgang ausgeführt wurde. Dies allein ist der Wert von targetEnv jedoch immer noch ein leeres Zeichen. Beschreiben Sie daher den einzustellenden Teil. Ich werde mehr hinzufügen.
build.gradle
//(Weggelassen)
def templateFile = 'application_template.properties'
def configFile = 'application.properties'
def targetEnv = ''
task replaceConfig {
// (Unterlassung)
}
task warProduct {
//Wird im Build der Ansicht "Gradle-Aufgaben" nach Einstellungsgruppe angezeigt
group = 'build'
description 'Create war file for product environment.'
doLast {
//Setze targetEnv
targetEnv = 'product'
}
//Führen Sie nach dem Festlegen von targetEnv die Task replaceConfig aus
finalizedBy {
replaceConfig
}
}
//dev ist dasselbe wie Product
task warDev {
group = 'build'
description 'Create war file for dev environment.'
doLast {
targetEnv = 'dev'
}
finalizedBy {
replaceConfig
}
}
Ich habe geschrieben, um die replaceConfig-Task auszuführen, nachdem in jeder Task targetEnv festgelegt wurde. Das sollte funktionieren. Das Folgende ist die ungeschnittene Version.
build.gradle
plugins {
id 'org.springframework.boot' version '2.1.9.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
id 'war'
}
war {
enabled = true
archiveName 'sample.war'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
//Jeder Dateiname
def templateFile = 'application_template.properties'
def configFile = 'application.properties'
//Name der Zielumgebung (ersetzen Sie später einen Wert)
def targetEnv = ''
task replaceConfig {
description 'Replace application.properties environment.'
doLast {
println ' start replacing :' + targetEnv
//Ausführungsteil kopieren
copy {
// from:Geben Sie das Verzeichnis an, das die zu kopierenden Dateien enthält
from '.'
// include:Dieses Mal gebe ich den zu kopierenden Dateinamen an
include templateFile
//Zielverzeichnis kopieren
into 'src/main/resources'
// application.In Eigenschaften umbenennen
rename(templateFile, configFile)
// application_In der Vorlage${buildEnv}Ersetzen
expand([
buildEnv: targetEnv
])
println " replacing finished"
}
}
//Wenn die Ersetzungsaufgabe abgeschlossen ist, wird war mit dem Befehl war ausgegeben.
finalizedBy {
war
}
}
task warProduct {
//Wird im Build der Ansicht "Gradle-Aufgaben" nach Einstellungsgruppe angezeigt
group = 'build'
description 'Create war file for product environment.'
doLast {
//Setze targetEnv
targetEnv = 'product'
}
//Führen Sie nach dem Festlegen von targetEnv die Task replaceConfig aus
finalizedBy {
replaceConfig
}
}
//dev ist dasselbe wie Product
task warDev {
group = 'build'
description 'Create war file for dev environment.'
doLast {
targetEnv = 'dev'
}
finalizedBy {
replaceConfig
}
}
Dies ist abgeschlossen. Wenn Sie warDev oder warProduct über Gradle-Aufgaben ausführen, wird in build / lib eine Kriegsdatei erstellt. Wenn Sie den Krieg entpacken und die darin enthaltenen application.properties überprüfen, sollte dies die Einstellung jeder Umgebung sein.
Recommended Posts