如何根据活动弹簧配置文件切换弹簧启动启动类

问题描述:

我想我误解了Spring启动配置文件功能。 我在春天启动的应用程序有两个独立的启动类(ApplicationLocal和ApplicationProduction), 这些类注释这样如何根据活动弹簧配置文件切换弹簧启动启动类

@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 { 
// 

,我想在这取决于运行时得到回升相应的启动类增长春天启动-Dspring.profiles.active jvm争论的价值。 但它不是为我工作,除非我提到的启动类部分的pom.xml 这样的..

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

如果我不提在pom.xml中的启动类,然后我得到以下错误: (我运行应用程序如下

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

而且我得到以下错误

[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

真的需要有不同的课程吗?每个配置文件有多少不同的业务逻辑?还是只有一些配置不同,如不同的数据库连接或如此? – Patrick

您可以创建一个主CLAS S和两个配置每个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 { 
    //... 
} 

为主类的将扫描豆类,Spring会根据您的实际轮廓挑选正确的配置。

+0

完美的为我工作。谢谢。 –