2016-08-03 14 views
0

Ich glaube, ich missverstanden Spring Boot-Profile-Funktionalität. Ich habe zwei separate Startklassen (ApplicationLocal und ApplicationProduction) in meiner Feder Boot-Anwendung, Diese Klassen wie dieseWie Spring Boot Startup-Klasse basierend auf aktiven Federprofil zu wechseln

@SpringBootApplication 
@EnableSwagger2 
@Import(value={Config.class}) 
@ComponentScan(basePackages={"com.abc.*"}) 
@Profile("local") 
public class ApplicationLocal extends SpringBootServletInitializer { 
// 

@SpringBootApplication 
@EnableSwagger2 
@Import(value={Config.class}) 
@ComponentScan(basePackages={"com.abc.*"}) 
@Profile("production") 
public class ApplicationProduction extends SpringBootServletInitializer { 
// 

kommentiert und ich möchte, dass die entsprechende Startklasse von Spring-Boot zur Laufzeit je nach abgeholt werden der Wert von -Despring.profiles.active jvm argument. Aber nicht für mich arbeiten, es sei denn ich wie dies in Abschnitt in pom.xml Start-Klasse erwähnen ..

<properties> 
    <start-class>com.abc.web.service.ApplicationLocal</start-class> 
</properties> 

Wenn ich die Start-Klasse in pom.xml nicht erwähnen, dann erhalte ich die folgende Fehler: (i laufen die App wie folgt

mvn spring-boot:run -Drun.jvmArguments=" -Dspring.profiles.active=local" 

und ich bekomme die folgenden Fehler

[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.3.3.RELEASE:run (default-cli) on project payee-list-ws: Execution default-cli of goal org.springframework.boot:spring-boot-maven-plugin:1.3.3.RELEASE:run failed: Unable to find a single main class from the following candidates [com.abc.web.service.ApplicationProduction, com.abc.web.service.ApplicationLocal] -> [Help 1] 
+0

Gibt es wirklich eine Notwendigkeit, verschiedene Klassen zu haben? Gibt es so viele verschiedene Geschäftslogiken für jedes Profil? Oder gibt es nur einige Konfigurationsunterschiede wie verschiedene Datenbankverbindungen oder so? – Patrick

Antwort

1

Sie ein Haupt cla erstellen s und zwei Konfigurationen für jedes env:

@SpringBootApplication 
@EnableSwagger2 
@Import(value={Config.class}) 
@ComponentScan(basePackages={"com.abc.*"}) 
public class Application extends SpringBootServletInitializer { 
// 

@Configuration 
@Profile("production") 
public class ConfigProduction { 
    //... 
} 

@Configuration 
@Profile("Local") 
public class ConfigLocal { 
    //... 
} 

Als Hauptklasse für Bohnen scannen, Frühling korrekte Konfiguration wählen basierend auf Ihrem aktuellen Profil.

+0

perfekt, dass für mich gearbeitet hat. Vielen Dank. –