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