我在spring boot中有2个类实现命令行运行器。他们基本上看起来像这样:
@SpringBootApplication
@ComponentScan("com.xxxx")
public class Application implements CommandLineRunner {
,第二个看起来像:
@SpringBootApplication
@ComponentScan("com.xxxx")
public class ApplicationWorklfow implements CommandLineRunner {
他们编译得很好。但是当我尝试用java -jar运行它时,我得到一个错误,大概是因为spring不知道要运行哪一个。
是否有一个我可以使用的命令会告诉jar我正在尝试运行哪个应用程序?
答案 0 :(得分:2)
您可以拥有任意数量的CommandLineRunner
bean,但应该只有一个可以拥有@SpringBootApplication
注释的入口点类。请尝试删除@SpringBootApplication
上的ApplicationWorklfow
注释。
<强> PS:强>
似乎您的主要要求是有条件地启用2个CommandLineRunner bean中的一个。您可以只有一个Application类,并使用@Profile
或@ConditionalOnProperty
等条件有条件地启用CLR bean。
有多个带@SpringBootApplication
注释的入口点类不是一个好主意。
@SpringBootApplication
public class Application {
}
@Component
@Profile("profile1")
public class AppInitializer1 implements CommandLineRunner {
}
@Component
@Profile("profile2")
public class AppInitializer2 implements CommandLineRunner {
}
现在您可以按如下方式激活所需的个人资料:
java -jar -Dspring.profiles.active=profile1 app.jar
激活 profile1 后,只会运行 AppInitializer1 。
PS:PS:
如果由于某种原因你还想配置mainClass,你可以这样做:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>${start-class}</mainClass>
</configuration>
</plugin>
您可以利用Maven配置文件为不同的配置文件提供不同的类。有关详细信息,请参阅https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/maven-plugin/usage.html。