gpt4 book ai didi

spring-boot - 我在同一个 Spring boot 中有 2 个 CommandLineRunner

转载 作者:行者123 更新时间:2023-12-04 03:00:06 24 4
gpt4 key购买 nike

我在 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 我正在尝试运行哪个应用程序?

最佳答案

您可以拥有任意数量的 CommandLineRunner bean,但应该只有一个入口点类可以具有 @SpringBootApplication 注释。尝试删除 ApplicationWorklfow 上的 @SpringBootApplication 注释。

附言:

看来您的主要要求是有条件地启用 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 会运行。

附言:附言:

如果出于某种原因你仍然想配置 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了解更多信息。

关于spring-boot - 我在同一个 Spring boot 中有 2 个 CommandLineRunner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49960625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com