首页 > 解决方案 > 从 Spring Beans 访问命令行参数(在本例中为 ApplicationReadyEvent 侦听器)

问题描述

我们有一个 Spring-Boot 应用程序,我们首先通过命令行传递一些参数。

我们希望在收到 ApplicationReadyEvent 时访问这些参数,以便在应用程序启动时执行一些逻辑。

我无法让它工作。尝试使用 @EventListener 注释甚至接口,但似乎没有任何效果。

标签: springspring-boot

解决方案


我认为您只是在问如何在事件侦听器中访问应用程序的命令行参数。为此,您可以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]

推荐阅读