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对象作为参数,是对原始参数做了进一步的封装。
作者:欢醉
公众号【一个码农的日常】 技术群:319931204 1号群: 437802986 2号群: 340250479
出处:http://zhangs1986.cnblogs.com/
码云:https://gitee.com/huanzui
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
公众号【一个码农的日常】 技术群:319931204 1号群: 437802986 2号群: 340250479
出处:http://zhangs1986.cnblogs.com/
码云:https://gitee.com/huanzui
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。