springboot项目启动后就执行特定方法

实现springboot项目启动后就执行特定方法

所遇到的问题:

在项目启动中初始化数据时调用其他feign client的方法时调不通,报“com.netflix.hystrix.exception.HystrixRuntimeException: UserApi#queryWxAttentionOpenIdList() timed-out and no fallback available.”,如何解决这个问题呢?

分析:

因为在启动时因为加载机制并不能找到userApi所属服务所在位置,只能通过启动成功后去调用,那又如何实现项目启动成功后立刻去实现我想实现的业务(比如初始化数据)呢?

ApplicationRunnerCommandLineRunner。这两个接口是Springboot给我们提供的两种“开机启动”方式

ApplicationRunner:

 源码如下:

      public interface ApplicationRunner {

          void run(ApplicationArguments var1) throws Exception;
      }

CommandLineRunner  :

 源码如下:        

         public interface CommandLineRunner {

          void run(String... var1) throws Exception;
     }
相同点:这两种方法提供的目的是为了满足在项目启动的时候立刻执行某些方法。我们可以通过实现ApplicationRunner和CommandLineRunner来实现,他们都是在SpringApplication 执行之后开始执行的。
不同点:CommandLineRunner接口可以用来接收字符串数组的命令行参数,ApplicationRunner 是使用ApplicationArguments 用来接收参数的

例如我实现启动成功后立即去调用另一个服务查询用户关注信息初始值:

@Component
public class UserAttentionInitRunner implements ApplicationRunner {

    @Autowired
    private WeChatUserAttentionService weChatUserAttentionService;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        weChatUserAttentionService.loadDataFromDb();
    }
}

如果是执行的方法不止一个且有顺序时则需要通过@Order(value = n)注解来指定顺序,n值越小越先执行

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值