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
网友评论