【问题标题】:How can I pass values to @ComponentScan through terminal?如何通过终端将值传递给 @ComponentScan?
【发布时间】:2021-07-13 08:03:19
【问题描述】:

我有一个用例,我只想在我的 SpringBoot 应用程序中执行一些包。所以,在我的主要课程中,我正在使用这样的东西 -

@SpringBootApplication
@ComponentScan(basePackages = {"com.example"})
public class Example {

  public static void main(String[] args) {
    SpringApplication.run(Example.class, args);
  }
}

所以,在这里我将 basePackages 硬编码为“com.example”。这不是我想要的。当应用程序通过命令行参数从终端运行时,我想接收包名称。 有没有办法可以将命令行参数传递给应用程序并使用我在 basePackages 中收到的参数? 提前致谢

【问题讨论】:

  • 您确定要/需要根据包进行操作吗?将组件分配给配置文件并从某个配置文件开始以启用/禁用一组 Spring 组件更容易。见baeldung.com/spring-profiles
  • 那么,我可以通过命令行将值传递给“spring.profiles.active”吗?如果是的话,你能给我一个示例代码吗?谢谢
  • 请参阅stackoverflow.com/questions/31038250/…,了解如何从命令行激活配置文件。

标签: java spring spring-boot maven


【解决方案1】:

您可以为此使用占位符:

@SpringBootApplication
@ComponentScan(basePackages="${scan.myPackage}")
public class Example {
  public static void main(String[] args) {
    SpringApplication.run(Example.class, args);
  }
}

在终端上,你可以这样做:

java -jar app.jar --scan.myPackage=com.example

您可能想了解profiles

编辑:

Spring Boot 2.x and Maven 3.x 及以上,提供动态值的命令是:

java -jar -Dscan.myPackage=com.example app.jar

【讨论】:

  • 对不起,如果我听起来很愚蠢。所以,这也适用于spring-boot,对吗?另外,如果我目前没有jar,我该如何运行?
  • @TrayambakKumar 我想在应用程序通过命令行参数从终端运行时接收包名:如果你没有jar,怎么办将从终端 running :) ?
  • 我想要这样的东西(mvn spring-boot:run -Dspring-boot.run.arguments="--scan.myPackage=com.example" )。但你的回答给我指明了道路。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多