springboot項目啟動之后,需要主動執(zhí)行一些方法??墒褂靡韵聝煞N方法:
1. @Component 實現(xiàn)`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("==== 喚醒通話記錄監(jiān)聽開始 ===");
getReportMsg();
logger.info("==== 喚醒通話記錄監(jiān)聽成功 ===");
}
}
2. @Component 實現(xiàn)CommandLineRunner類
@Component
public class DemoComLiner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("CommandLineRunner");
}
}
以上兩個XXXRunner接口,如果有多個實現(xiàn)其中同一個,可以通過@Order(123)注解進行排序,進行順序執(zhí)行。
另外,如果方法執(zhí)行失敗,可能造成springboot啟動不成功。第一個demo中,由于getReportMsg()方法中有一個包找不到,導致程序直接重啟了一晚上,第二天早上來才知道,還好只是測試環(huán)境。
由于項目使用的是springboot + dubbo ,在本地測試的時候,正常啟動項目之后,MnsApplicationRunner implements ApplicationRunner是可以的。但是發(fā)布到線上環(huán)境之后,發(fā)現(xiàn)并不可以,日志未打出,想要實現(xiàn)的喚醒MQ監(jiān)聽也未實現(xiàn)。于是換了下面一種寫法。
在springboot的啟動類中添加:
@Bean
public ApplicationRunner runner() {
return args -> {
logger.info("==== 喚醒通話記錄監(jiān)聽開始 ===");
this.getReportMsg();
logger.info("==== 喚醒通話記錄監(jiān)聽成功 ===");
logger.info("==== 喚醒通話錄音監(jiān)聽開始 ===");
this.getRecordingMsg();
logger.info("==== 喚醒通話錄音監(jiān)聽成功 ===");
};
}
再在測試環(huán)境啟動項目,成功!

dubbo測試環(huán)境ok.png