1. 概述
在微服务应用启动的时候,有时我们希望在应用启动完成的时候,执行以下某个初始代码,SPRINTBOOT有两种方法。
2. 实现说明
2.1 实现 CommandLineRunner 接口
@Component
public class OpenOfficeRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
String config = SysPropertiesUtil.getString("openOfficeConfig");
OpenOfficeUtil.startService(config);
}
}
2.2 实现 ApplicationListener 接口
public class OsGroupApiListener implements ApplicationListener<ContextRefreshedEvent> {
private static Logger logger = LoggerFactory.getLogger(OsGroupApiListener.class);
public static final String API_URL_GROUP = "apiMap_";
// 增加一个标识
private volatile AtomicBoolean isInit=new AtomicBoolean(false);
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
// CAS修改是否初始化标识,防止重复触发
if(!isInit.compareAndSet(false,true)) {
return;
}
ApplicationContext context = event.getApplicationContext();
//执行具体的业务逻辑
}
这里可能会执行多次,使用一个标识控制重复执行。
文档更新时间: 2021-07-15 17:26 作者:zyg