SpringBoot 启动顺序

SparingBoot 启动顺序

1、如何实现springboot容器加载完后执行的方法

在Spring Boot中,您可以使用 ApplicationRunnerCommandLineRunner接口来实现此目的。

ApplicationRunner 和 CommandLineRunner接口都提供了一个 run() 方法,该方法在Spring Boot应用程序启动后立即执行。您可以在这个方法中执行任何逻辑,例如初始化数据、启动后台任务等。

以下是一个示例 ApplicationRunner 实现:


@Component

public class MyApplicationRunner implements ApplicationRunner {

    @Override

    public void run(ApplicationArguments args) throws Exception {

        // do something after application started

    }

}

 

在这个例子中,我们定义了一个名为MyApplicationRunner的组件,并实现了ApplicationRunner接口。在 run() 方法中,我们可以执行任何逻辑,例如初始化数据、启动后台任务等。

请注意,您需要将MyApplicationRunner组件标记为@Component,以便Spring Boot可以自动检测和加载它。

如果您想要更细粒度的控制,您可以使用 @Order 注解来指定ApplicationRunner或CommandLineRunner的执行顺序。例如:


@Component

@Order(1)

public class MyFirstApplicationRunner implements ApplicationRunner {

    @Override

    public void run(ApplicationArguments args) throws Exception {

        // do something first

    }

}

 

@Component

@Order(2)

public class MySecondApplicationRunner implements ApplicationRunner {

    @Override

    public void run(ApplicationArguments args) throws Exception {

        // do something second

    }

}

 

在这个例子中,我们定义了两个ApplicationRunner组件,并使用@Order注解来指定它们的执行顺序。

MyFirstApplicationRunner将在MySecondApplicationRunner之前执行。

请注意,@Order注解的值越小,优先级越高。

1.1、ApplicationRunner和CommandLineRunner接口有什么不同?

这两个接口都可以在Spring Boot应用程序启动后执行逻辑,但它们之间有一些区别。ApplicationRunner接口提供了一个run()方法,该方法接受一个 ApplicationArguments对象作为参数。ApplicationArguments对象包含应用程序启动时传递的命令行参数。您可以使用ApplicationArguments对象来访问这些参数,并在run()方法中执行任何逻辑。

CommandLineRunner接口也提供了一个run()方法,但它接受一个 String数组作为参数,该数组包含应用程序启动时传递的命令行参数。您可以使用String数组来访问这些参数,并在run()方法中执行任何逻辑。

因此,ApplicationRunner和CommandLineRunner接口之间的主要区别在于:

它们接受的参数类型不同。如果您需要访问应用程序启动时传递的命令行参数,您应该使用ApplicationRunner接口。如果您只需要访问命令行参数的字符串数组,您可以使用CommandLineRunner接口。

Comments