wake-up-neo.net

Festlegen des aktiven Standardprofils in Spring-Boot

Ich möchte, dass mein voreingestelltes aktives Profil production ist, wenn -Dspring.profiles.active nicht festgelegt ist.

Ich habe folgendes in meinem application.properties versucht, aber es hat nicht funktioniert:

spring.profiles.default=production

Spring-Boot-Version = 1.3.5.RELEASE

26
DarVar

Sie setzen hier das Standardprofil default (das Profil, das für ein Bean verwendet wird, wenn Sie die Annotation @Profile nicht angeben) auf production.

Was Sie wirklich tun müssen, ist das Standardprofil active zu setzen. Dies geschieht folgendermaßen:

spring.profiles.active=production
45
PaulNUK

--spring.profiles.active=production hinzufügen

Beispiel:

Java -jar file.jar --spring.profiles.active=production
7
Jaya Naresh

Fügen Sie dies in App.Java ein:

public static void main(String[] args) throws UnknownHostException {
    SpringApplication app = new SpringApplication(App.class);
    SimpleCommandLinePropertySource source = new SimpleCommandLinePropertySource(args);
    if (!source.containsProperty("spring.profiles.active") &&
            !System.getenv().containsKey("SPRING_PROFILES_ACTIVE")) {

        app.setAdditionalProfiles("production");
    }
    ...
}

So wird es in JHipster gemacht

6
Tom Van Rossom

Ich mache es so

    System.setProperty("spring.profiles.default", "dev");

ganz am Anfang von main(...)

6
scorpp

Wenn Sie Maven verwenden, würde ich so etwas tun:

Produktion Ihr Standardprofil:

<properties>
    <activeProfile>production</activeProfile>
</properties>

Und als Beispiel für andere Profile:

<profiles>
    <!--Your default profile... selected if none specified-->
    <profile>
        <id>production</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <activeProfile>production</activeProfile>
        </properties>
    </profile>

    <!--Profile 2-->
    <profile>
        <id>development</id>
        <properties>
            <activeProfile>development</activeProfile>
        </properties>
    </profile>

    <!--Profile 3-->
    <profile>
        <id>otherprofile</id>
        <properties>
            <activeProfile>otherprofile</activeProfile>
        </properties>
    </profile>
<profiles>

In Ihren application.properties müssen Sie Folgendes einstellen:

[email protected]@

Das funktioniert jedes Mal für mich, ich hoffe, es löst dein Problem.

5
alpez

Mit der folgenden Lösung ist zunächst zu verstehen, dass always der Spring Boot die Datei application.properties liest. Die Profildateien des anderen only ergänzen und ersetzen daher die zuvor definierten Eigenschaften.

Betrachten Sie die folgenden Dateien:

application.properties
application-qa.properties
application-prod.properties

1) sehr wichtig Der application.properties und nur diese Datei muss die folgende Zeile haben:

[email protected]@

2) Ändern Sie, was in den QA- und PROD-Konfigurationsdateien gewünscht wird, um den Unterschied zwischen den Umgebungen zu sehen.

3) Starten Sie die Spring Boot-App über die Befehlszeile mit einer der folgenden Optionen:

Die App wird mit der Standarddatei application.properties gestartet:

mvn spring-boot:run

Es lädt die Standarddatei application.properties und nach der application-qa.properties-Datei die Standardkonfiguration ab und/oder ergänzt sie:

mvn spring-boot:run -Dspring.profiles.active=qa

Dasselbe hier, jedoch mit der Produktionsumgebung anstelle von QS:

mvn spring-boot:run -Dspring.profiles.active=prod

Bei der Einstellung von spring.profiles.active In Java ist ein ähnliches Problem aufgetreten.

Dies ist, was wir am Ende herausgefunden haben, nachdem wir vier verschiedene Möglichkeiten zur Bereitstellung von spring.profiles.active Ausprobiert hatten.

In Java-8

$ Java --spring.profiles.active=dev -jar my-service.jar
Gives unrecognized --spring.profiles.active option.
$ Java -jar my-service.jar --spring.profiles.active=dev
# This works fine
$ Java -Dspring.profiles.active=dev -jar my-service.jar
# This works fine
$ Java -jar my-service.jar -Dspring.profiles.active=dev
# This doesn't works

In Java-11

$ Java --spring.profiles.active=dev -jar my-service.jar
Gives unrecognized --spring.profiles.active option.
$ Java -jar my-service.jar --spring.profiles.active=dev
# This doesn't works
$ Java -Dspring.profiles.active=dev -jar my-service.jar
# This works fine
$ Java -jar my-service.jar -Dspring.profiles.active=dev
# This doesn't works

HINWEIS: Wenn Sie spring.profiles.active In Ihrer application.properties - Datei angeben, stellen Sie sicher, dass Sie die Option spring.config.location Oder spring.config.additional-location Für = angeben Java entsprechend wie oben erwähnt.

2
mchawre

Derzeit wird Maven + Spring Boot verwendet. Unsere Lösung war folgende:

application.properties

#spring.profiles.active= # comment_out or remove

securityConfig.Java

@Value(${spring.profiles.active:[default_profile_name]}")
private String ACTIVE_PROFILE_NAME;

Die Gutschrift beginnt mit MartinMlima . Ähnliche Antwort hier:

Wie erhält man ein aktuelles aktives/standardmäßiges Umgebungsprofil programmgesteuert in Spring?

1
user1653042

Je nach Umgebung kann es separate Anwendungseigenschaftendateien geben, wenn die Spring Boot-Anwendung erstellt wird. Zum Beispiel - Eigenschaftendatei für Entwicklungsumgebung, application-dev.properties:

spring.hivedatasource.url=<Hive dev data source url>
spring.hivedatasource.username=dev
spring.hivedatasource.password=dev
spring.hivedatasource.driver-class-name=org.Apache.Hive.jdbc.HiveDriver

application-test.properties:

spring.hivedatasource.url=<Hive dev data source url>
spring.hivedatasource.username=test
spring.hivedatasource.password=test
spring.hivedatasource.driver-class-name=org.Apache.Hive.jdbc.HiveDriver

Und eine primäre application.properties-Datei zur Auswahl des Profils:

application.properties:

spring.profiles.active=dev
server.Tomcat.max-threads = 10
spring.application.name=sampleApp

Definieren Sie die DB-Konfiguration wie folgt:

@Configuration
@ConfigurationProperties(prefix="spring.hivedatasource")
public class DBConfig {

    @Profile("dev")
    @Qualifier("hivedatasource")
    @Primary
    @Bean
    public DataSource devHiveDataSource() {
        System.out.println("DataSource bean created for Dev");
        return new BasicDataSource();
    }

    @Profile("test")
    @Qualifier("hivedatasource")
    @Primary
    @Bean
    public DataSource testHiveDataSource() {
        System.out.println("DataSource bean created for Test");
        return new BasicDataSource();
    }

Dadurch wird die BasicDataSource-Bean automatisch gemäß dem in der Datei application.properties festgelegten aktiven Profil erstellt. Führen Sie die Spring-Boot-Anwendung aus und testen Sie sie.

Beachten Sie, dass dadurch zunächst eine leere Bean erstellt wird, bis getConnection () aufgerufen wird. Sobald die Verbindung verfügbar ist, können Sie die URL, die Treiberklasse usw. mithilfe dieser DataSource-Bean abrufen.

0
Santhoshm

In AWS LAMBDA:

Für $ sam local fügen Sie Ihrer sam-Template-Yml-Datei die folgende Zeile hinzu:

Resources:
   FunctionName:
       Properties:
           Environment:
               Variables:
                  SPRING_PROFILES_ACTIVE: local

In der AWS Console: In Ihren Lambda-Umgebungsvariablen fügen Sie einfach Folgendes hinzu:

SCHLÜSSEL: Java_TOOL_OPTIONS WERT: -Dspring.profiles.active=dev 

 enter image description here

0
Jay