spring - 从 Spring Beans 访问命令行参数(在本例中为 ApplicationReadyEvent 侦听器)
问题描述
我们有一个 Spring-Boot 应用程序,我们首先通过命令行传递一些参数。
我们希望在收到 ApplicationReadyEvent 时访问这些参数,以便在应用程序启动时执行一些逻辑。
我无法让它工作。尝试使用 @EventListener 注释甚至接口,但似乎没有任何效果。
解决方案
我认为您只是在问如何在事件侦听器中访问应用程序的命令行参数。为此,您可以ApplicationArguments
通过其构造函数将 bean 注入侦听器对象,如下所示:
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import java.util.Arrays;
@Component
public class Ready implements ApplicationListener<ApplicationReadyEvent> {
private ApplicationArguments appArgs;
public Ready(ApplicationArguments appArgs) {
this.appArgs = appArgs;
}
@Override
public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) {
System.out.println("App Args: " + Arrays.asList(appArgs.getSourceArgs()));
}
}
拥有ApplicationArguments
对象后,您可以通过该方法将命令行参数作为数组访问getSourceArgs()
。我将数组转换为列表,以便正确打印。
作为测试,我在启动时将三个参数“a”、“b”和“c”传递给我的应用程序,并在应用程序启动结束时打印此行:
App Args: [a, b, c]
推荐阅读
- c# - C#中的MongoDb聚合
- powershell - 无法使用 powershell 在 jenkins 管道中运行 exe
- java - 如何让 Kotlin 与 Open JDK 16 一起运行?
- php - 如何将 PHP 扩展添加到 Laravel Sail 附带的 docker-compose.yml 配置中?
- flutter - 问题:推送通知颤动
- unity3d - 将搅拌机模型导入统一
- c# - 如何使用共享内存将对象引用从一个 uwp 应用程序共享到另一个应用程序?
- node.js - 在 Typescript 中使用断言并获取“断言要求调用目标中的每个名称都使用显式类型注释声明”错误
- angular - Angular 2中使用[ngStyle]的getter vs property vs属性绑定
- azure-pipelines - 仅在 90% 的时间跳过特定的先前任务时才运行任务(Azure Build Pipeline Classical)