千家信息网

springmvc工程启动完成后执行初始化方法的示例分析

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章给大家介绍springmvc工程启动完成后执行初始化方法的示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在项目中,我们需要在应用启动完成后,执行特定的动作,比如调
千家信息网最后更新 2026年11月01日springmvc工程启动完成后执行初始化方法的示例分析

这篇文章给大家介绍springmvc工程启动完成后执行初始化方法的示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

在项目中,我们需要在应用启动完成后,执行特定的动作,比如调用第三方接口完成初始化。

实现

1、实现接口ApplicationListener<ContextRefreshedEvent>,重写onApplicationEvent方法。

package com.iss.scheduler.task;import com.iss.isp.commonadapter.service.camera.service.ICameraService;import com.iss.models.commonadapter.constants.IpcCmdType;import com.iss.models.commonadapter.pojo.DeviceCmd;import com.j7cai.common.exception.FrameException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.context.ApplicationListener;import org.springframework.context.event.ContextRefreshedEvent;import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;import javax.annotation.Resource;import java.util.ArrayList;import java.util.List;/** * 服务启动时 * 加载订阅元数据 */@Componentpublic class IpcActionLoader implements ApplicationListener {    private final static Logger logger = LoggerFactory.getLogger(IpcActionLoader.class);    @Resource    private ICameraService iCameraService;//    @PostConstruct//    public void init() {////    }    @Override    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {        // root application context 没有parent, 保证只有在root application context初始化完成后调用逻辑代码,其他的容器的初始化完成,则不做任何处理        if(contextRefreshedEvent.getApplicationContext().getParent() == null) {            logger.info("begin to subscribe camera data.");            // TODO 查询要订阅元数据的摄像机            List deviceIdList = new ArrayList<>();            deviceIdList.add(202103160927120057L);            deviceIdList.add(202103160927120050L);            DeviceCmd deviceCmd;            for (Long deviceId:deviceIdList) {                deviceCmd = new DeviceCmd();                deviceCmd.setDeviceID(deviceId);                try {                    // 先停止取流 ,再调用IVS_PU_RealPlay接口取智能元数据流                    deviceCmd.setCmdType(IpcCmdType.DIS_ARM);                    iCameraService.deviceControlCmd(deviceCmd);                    deviceCmd.setCmdType(IpcCmdType.ARM);                    iCameraService.deviceControlCmd(deviceCmd);                } catch (FrameException e) {                    logger.error(deviceId + " subscribe camera data error." + e.toString(), e);                }            }        }    }}

2、此时发现方法会被调用两次,原因如下:

applicationontext和使用MVC之后的webApplicationontext会两次调用上面的方法,如何区分这个两种容器呢?

但是这个时候,会存在一个问题,在web 项目中(spring mvc),系统会存在两个容器,一个是root application context ,另一个就是我们自己的 projectName-servlet context(作为root application context的子容器)。

这种情况下,就会造成onApplicationEvent方法被执行两次。为了避免上面提到的问题,我们可以只在root application context初始化完成后调用逻辑代码,其他的容器的初始化完成,则不做任何处理,修改后代码

如下:

@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
if(event.getApplicationContext().getParent() == null){//root application context 没有parent,他就是老大.
//需要执行的逻辑代码,当spring容器初始化完成后就会执行该方法。
}
}

关于springmvc工程启动完成后执行初始化方法的示例分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

方法 容器 代码 接口 数据 逻辑 工程 示例 分析 内容 就是 更多 问题 项目 帮助 订阅 不错 两个 兴趣 动作 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州万易互联网科技有限公司 互联网络科技有限公司 互联网金融公司科技 上海挚品互联网科技 上海万想互联网科技 长亮科技互联网金融 互联网科技视频素材 互联网养老 桔豆科技 南平创想时代互联网科技有限公司 苏州五指互联网络科技有限 互联网科技公司有风险吗 互联网科技研发水平 特约风豹互联网科技为什么扣费 中科明德北京互联网科技 广州燕处互联网科技有限公司 互联网高科技行业有哪些企业 长沙渺峰互联网科技有限公司 广州三三互联网科技有限公司 互联网科技大会大佬 高科技和互联网的现代国家 互联网 科技 中国科技互联网公司收入 千方科技属于互联网企业吗 华夏互联网科技业 科技赋能视角下互联网保险发展 合肥互联网科技公司公章图片 锡山区互联网智能科技产品供应 科技互联网经济论坛 互联网科技企业文化 科技发展第三阶段互联网时代
0