Spring Boot Maven Plugin启动多应用问题:如何仅启动指定应用
解决方案:仅启动默认Web应用的几种方法
1. 精准配置插件并隔离组件扫描
首先得确保你的spring-boot-maven-plugin只绑定Web应用的主类,同时调整Web应用的组件扫描范围,避免误触发命令行应用的启动逻辑:
步骤1:配置Maven插件
在pom.xml里明确指定Web应用的主类,让插件只启动这个入口:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 指定Web应用的主类 --> <mainClass>com.sps.BackendApplication</mainClass> </configuration> </plugin> </plugins> </build>
步骤2:调整Web应用的组件扫描范围
修改BackendApplication的@SpringBootApplication注解,限定扫描的包路径,把命令行应用的代码隔离开:
@SpringBootApplication(scanBasePackages = "com.sps.backend") public class BackendApplication { public static void main(String[] args) { SpringApplication.run(BackendApplication.class, args); } }
把MigrationApplication放在独立的包(比如com.sps.migration)下,这样Web应用启动时就不会扫描到它,自然不会触发它的启动流程。
2. 使用Maven Profile区分两个应用
如果需要保留两个应用的启动能力,但默认只启动Web应用,可以用Maven Profile来隔离配置:
在pom.xml中添加Profile配置
<profiles> <!-- 默认激活的Web应用Profile --> <profile> <id>web-app</id> <activation> <activeByDefault>true</activeByDefault> </activation> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.sps.BackendApplication</mainClass> </configuration> </plugin> </plugins> </build> </profile> <!-- 命令行应用的Profile --> <profile> <id>migration-app</id> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.sps.MigrationApplication</mainClass> <!-- 指定使用PropertiesLauncher --> <launcherClass>org.springframework.boot.loader.PropertiesLauncher</launcherClass> <layout>ZIP</layout> </configuration> </plugin> </plugins> </build> </profile> </profiles>
这样执行mvn spring-boot:run时,默认会激活web-appProfile,只启动BackendApplication;如果需要启动命令行应用,只需执行mvn spring-boot:run -P migration-app。
3. 开发阶段直接运行Web应用主类
如果你用IDE(比如IntelliJ IDEA、Eclipse),可以直接找到BackendApplication类,右键选择"Run"或"Debug",这样只会启动这个主类,完全不会涉及命令行应用的启动逻辑,这也是开发阶段最快捷的方式。
关键注意点
- 别让
MigrationApplication的@SpringBootApplication被BackendApplication的组件扫描覆盖,否则可能会加载额外配置,但不会启动另一个应用上下文(除非你手动调用了SpringApplication.run(MigrationApplication.class, args))。 - 如果之前的
pom.xml里有多个spring-boot-maven-plugin实例,建议删除多余的,避免配置冲突。
内容的提问来源于stack exchange,提问作者Sydney
相关产品推荐
相关产品推荐

