从Spring Beans访问命令行参数(在本例中为ApplicationReadyEvent侦听器)

时间:2019-04-13 18:43:58

标签: spring spring-boot

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

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

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

1 个答案:

答案 0 :(得分:2)

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