SpringBoot项目启动后再请求远程接口的实现方式

场景

  有一个SpringBoot项目需要在启动后请求另一个远程服务拿取配置,而不是加载过程中去请求,可能会出现类没有实例化的场景,因此需要实现项目完全启动后再进行请求的场景。

解决

一般会有两种实现方式:

实现ApplicationRunner接口

@Component
public class ConsumerRunner implements ApplicationRunner{
    @Override
    public void run(ApplicationArgumers args) throws Exception{
        //逻辑
        System.out.println("SpringBoot项目启动后执行");
    }
}

  若有多个代码段需要执行,可用@Order注解设置执行的顺序,值越小越先执行添加如@Order(value=1)

实现CommandLineRunner接口

@Component
public class CommandLineRunnerBean implements CommandLineRunner {
    @Override
    public void run(String... args) {
        String strArgs = Arrays.stream(args).collect(Collectors.joining("|"));
        System.out.println("SpringBoot项目启动后执行arguments:" + strArgs); 
}
}

  不同之处在于CommandLineRunner接口的run()方法接收String数组作为参数,即是最原始的参数,没有做任何处理;而ApplicationRunner接口的run()方法接收ApplicationArguments对象作为参数,是对原始参数做了进一步的封装。

posted @ 2023-02-13 08:45  欢醉  阅读(170)  评论(0编辑  收藏  举报