我们有一个Spring-Boot应用程序,首先通过命令行传递一些参数。
我们希望在收到ApplicationReadyEvent时访问这些参数,以在应用程序启动时执行一些逻辑。
我无法正常工作。尝试使用@EventListener注释甚至接口,但似乎没有任何作用。
答案 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]