springboot项目启动之后,需要主动执行一些方法

2021-03-03  本文已影响0人  帮我的鸵鸟盖个章

springboot项目启动之后,需要主动执行一些方法。可使用以下两种方法:

1. @Component 实现`ApplicationRunner 类

package com.bnq.privacy.server.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

import java.text.ParseException;

/**
 * get up mns way after application run
 *
 * @author HongYi@10004580
 * @createTime 2021年03月02日 17:46:00
 */
@Component
public class MnsApplicationRunner implements ApplicationRunner {
    private static final Logger logger = LoggerFactory.getLogger(MnsApplicationRunner.class);

    @Override
    public void run(ApplicationArguments args) throws Exception {
        logger.info("==== 唤醒通话记录监听开始 ===");
        getReportMsg();
        logger.info("==== 唤醒通话记录监听成功 ===");
    }
}

2. @Component 实现CommandLineRunner

@Component
public class DemoComLiner implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("CommandLineRunner");
    }
}

以上两个XXXRunner接口,如果有多个实现其中同一个,可以通过@Order(123)注解进行排序,进行顺序执行。

另外,如果方法执行失败,可能造成springboot启动不成功。第一个demo中,由于getReportMsg()方法中有一个包找不到,导致程序直接重启了一晚上,第二天早上来才知道,还好只是测试环境。

由于项目使用的是springboot + dubbo ,在本地测试的时候,正常启动项目之后,MnsApplicationRunner implements ApplicationRunner是可以的。但是发布到线上环境之后,发现并不可以,日志未打出,想要实现的唤醒MQ监听也未实现。于是换了下面一种写法。

在springboot的启动类中添加:

    @Bean
    public ApplicationRunner runner() {
        return args -> {
            logger.info("==== 唤醒通话记录监听开始 ===");
            this.getReportMsg();
            logger.info("==== 唤醒通话记录监听成功 ===");
            logger.info("==== 唤醒通话录音监听开始 ===");
            this.getRecordingMsg();
            logger.info("==== 唤醒通话录音监听成功 ===");
        };
    }

再在测试环境启动项目,成功!

dubbo测试环境ok.png
上一篇下一篇

猜你喜欢

热点阅读