`

Spring/SpringMVC在启动完成后执行方法

 
阅读更多

在某些情况下,有可能你会有这种需求:在Spring/SpringMVC项目中,当Spring/SpringMVC启动完成后,你需要执行一个方法来完成某些事件(比如创建网站地图,比如从订阅Redis服务器等),这个时候,可以使用Tomcat/Servlet容器提供的事件回调机制来完成,但是这样有个问题是:无法使用Spring提供的Annotation,解决方法是:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.storezhang.web;

import com.storezhang.util.TimeUtils;
import com.storezhang.video.util.SiteMapUtils;
import java.util.Timer;
import java.util.TimerTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Service;

/**
 * 启动监听器
 *
 * @author Storezhang
 */
@Service
public class StartupListener implements ApplicationListener<ContextRefreshedEvent> {

    @Autowired
    private SiteMapUtils sites;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent evt) {
        if (evt.getApplicationContext().getParent() == null) {
            createSitemap();
        }
    }

    private void createSitemap() {
        Timer timer = new Timer("createSitemap", true);
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("--->Create sitemap...");
                sites.createSiteMap();
                System.out.println("--->Success create sitemap...");
            }
        }, 1 * TimeUtils.MIN);
    }
}

 后续研究:
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容器初始化完成后就会执行该方法。 
        } 
      } 

分享到:
评论

相关推荐

    Spring SpringMVC在启动完成后执行方法源码解析

    SpringMVC启动完成后执行方法源码解析 SpringMVC框架在启动完成后执行方法源码解析是指在应用程序启动完成后,执行特定的方法或操作,以达到某些业务逻辑的实现。这种机制在实际项目开发中非常有用,例如在系统启动...

    Spring/SpringMVC/Hibernate框架模板,使用mysql数据库,使用eclipse和maven;附带sql文件

    Spring、SpringMVC和Hibernate是Java开发中三大主流框架,它们各自在应用程序的不同层次上发挥作用,共同构建出高效、模块化的Web应用。本项目结合了这三个框架,利用MySQL作为数据库,Eclipse作为开发IDE,Maven...

    SpringBoot/SpringMVC/Hibernate整合源码(不用Maven也行)

    完成上述步骤后,可以直接通过Java的`main`方法运行主类启动应用,Spring Boot会自动加载配置并启动内置的Tomcat服务器。也可以将项目打包成可执行的JAR文件,通过命令行使用`java -jar`命令在任何支持Java的环境中...

    Spring+SpringMVC+Mybatis框架整合源码

    在这个项目中,Spring负责管理bean的生命周期和依赖关系,SpringMVC处理Web请求并转发给业务逻辑,而Mybatis则作为数据访问层,负责执行数据库操作。通过这三者的集成,开发者可以构建出结构清晰、易于维护的Web应用...

    Spring-SpringMVC-Mybatis整合所有jar包

    在Java Web开发中,Spring、SpringMVC和Mybatis是三个非常重要的框架,它们的整合可以构建出高效、灵活的企业级应用。这个压缩包“Spring-SpringMVC-Mybatis整合所有jar包”包含了这三个框架整合所需的全部依赖,...

    spring+springMVC+Mybatis框架整合

    - `&lt;context-param&gt;`和`&lt;listener&gt;`用于初始化Spring的全局上下文,`ContextLoaderListener`监听器会在服务器启动时加载`applicationContext.xml`配置文件,创建ApplicationContext。 4. **SpringMVC配置**...

    搭建spring、springMVC、myBaits框架

    搭建Spring、SpringMVC和MyBatis这三大框架是Java Web开发中的常见任务,它们各自在应用程序的不同层次上提供服务,构建出一个完整的MVC(Model-View-Controller)架构。下面将详细介绍这三个框架以及如何将它们整合...

    spring-springMVC-mongodb整合例子

    这通常在Spring的配置文件中完成,可以使用`@Configuration`和`@EnableMongoRepositories`注解来启动MongoDB的数据访问层。 接着,创建MongoDB的Repository接口,这是Spring Data MongoDB提供的一种编程模型,可以...

    Spring+SpringMVC+MyBatis框架

    完成这些后,项目就可以启动运行,处理来自客户端的请求了。 总的来说,SSM框架组合提供了完整的解决方案,涵盖了从控制层到数据访问层的开发需求,使得开发者可以更专注于业务逻辑,而不是基础设施的搭建。这个自...

    IDEA整合Spring+Springmvc+mybatis+maven详细教程 实例下载

    本教程将向您展示如何在IntelliJ IDEA(IDEA)中整合Spring、SpringMVC、MyBatis和Maven,构建一个完整的SSM(Spring、SpringMVC、MyBatis)项目。以下是对每个组件及其整合过程的详细说明: 1. **Spring框架**:...

    spring+springmvc+ibatis的整合例子

    在Java Web开发领域,Spring、SpringMVC和iBatis是三个非常重要的框架,它们的组合被称为SSM(Spring、SpringMVC、MyBatis)。SSM框架的整合使用能够帮助开发者实现高效、灵活和可扩展的Web应用程序。下面将详细讲解...

    Spring+SpringMVC+MyBatis的JAR包

    Spring、SpringMVC和MyBatis是Java开发中非常流行的三大框架,它们分别负责不同的职责:Spring作为基础的依赖注入容器,SpringMVC是用于构建Web应用的模型-视图-控制器(MVC)框架,而MyBatis则是一个优秀的持久层...

    Maven 搭建Spring + SpringMVC.rar

    你可以通过运行`mvn clean package`命令打包项目,然后在服务器上部署`.war`文件,启动后就可以访问`http://yourserver/yourapp/hello`来查看结果了。这个过程涵盖了Maven项目的基本配置、Spring框架的IoC容器配置...

    在idea下使用maven构建spring+springMVC+hibernate架构

    在IT行业中,构建高效、可扩展的Web应用是至关重要的,而Spring、SpringMVC和Hibernate这三大框架的结合正是实现这一目标的常用方案。本文将深入探讨如何在IntelliJ IDEA(简称IDEA)环境下,利用Maven来构建一个...

    spring+springmvc4.2.4整合jar包

    3. **配置 ContextLoaderListener**:为了加载 Spring 的应用上下文,需要添加 `ContextLoaderListener`,它会在服务器启动时初始化 Spring 容器。 4. **定义 Controller**:创建处理请求的 Controller 类,通常...

    mybatis+spring+springmvc+oracle

    在开发环境中,开发者需要启动这个服务,然后通过HTTP请求触发Spring MVC的控制器方法,从而调用MyBatis的Mapper接口进行数据库查询。 通过这些知识点的整合,我们可以构建出一个完整的Web应用程序,实现从用户界面...

    springMvc+spring+Mybatis 实战案例 实用!

    在Spring中,MyBatis可以与Spring无缝集成,通过SqlSessionFactory和SqlSession对象,开发者可以方便地执行增删查改操作,同时,MyBatis的Mapper接口和XML配置文件或者注解方式让SQL与代码分离,提高了代码的可读性...

    学生信息管理系统(Spring+SpringMVC)

    本文将深入探讨一款使用Spring、SpringMVC框架构建的学生信息管理系统,旨在为读者提供一个全面的理解,以便于在实际开发中借鉴或改进。 首先,我们需要了解SSM框架。SSM是Spring、SpringMVC和MyBatis的缩写,是一...

    spring+springmvc+mybatis web项目

    在IT行业中,构建一个Web应用程序是一项常见的任务,而Spring、SpringMVC和MyBatis是三个非常关键的框架,它们通常被联合使用来构建高效、可维护的企业级应用。本项目是一个结合了这三个技术的典型示例,让我们深入...

    Spring+SpringMVC+Mybatis框架整合例子

    Spring将Mapper接口与XML文件关联起来,使得可以在Service层直接调用Mapper接口的方法,执行数据库操作。Service层负责业务逻辑,Controller层接收HTTP请求,调用Service层方法,最后返回视图或JSON数据。 项目运行...

Global site tag (gtag.js) - Google Analytics