`
gzynsoft
  • 浏览: 6747 次
社区版块
存档分类
最新评论

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

 
阅读更多

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

Java代码 
  1. /* 
  2.  * To change this license header, choose License Headers in Project Properties. 
  3.  * To change this template file, choose Tools | Templates 
  4.  * and open the template in the editor. 
  5.  */  
  6. package com.storezhang.web;  
  7.   
  8. import com.storezhang.util.TimeUtils;  
  9. import com.storezhang.video.util.SiteMapUtils;  
  10. import java.util.Timer;  
  11. import java.util.TimerTask;  
  12. import org.springframework.beans.factory.annotation.Autowired;  
  13. import org.springframework.context.ApplicationListener;  
  14. import org.springframework.context.event.ContextRefreshedEvent;  
  15. import org.springframework.stereotype.Service;  
  16.   
  17. /** 
  18.  * 启动监听器 
  19.  * 
  20.  * @author Storezhang 
  21.  */  
  22. @Service  
  23. public class StartupListener implements ApplicationListener<ContextRefreshedEvent> {  
  24.   
  25.     @Autowired  
  26.     private SiteMapUtils sites;  
  27.   
  28.     @Override  
  29.     public void onApplicationEvent(ContextRefreshedEvent evt) {  
  30.         if (evt.getApplicationContext().getParent() == null) {  
  31.             createSitemap();  
  32.         }  
  33.     }  
  34.   
  35.     private void createSitemap() {  
  36.         Timer timer = new Timer("createSitemap"true);  
  37.         timer.schedule(new TimerTask() {  
  38.             @Override  
  39.             public void run() {  
  40.                 System.out.println("--->Create sitemap...");  
  41.                 sites.createSiteMap();  
  42.                 System.out.println("--->Success create sitemap...");  
  43.             }  
  44.         }, 1 * TimeUtils.MIN);  
  45.     }  
  46. }  

 后续研究: 
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容器配置...

    spring+springmvc4.2.4整合jar包

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

    mybatis+spring+springmvc+oracle

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

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

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

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

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

    springMVC集成spring-data-redis

    在SpringMVC中集成Spring Data Redis,可以利用Redis的高效特性来提升应用程序的数据处理能力,例如作为session共享的存储、缓存数据或者实现发布/订阅(Pub/Sub)功能。发布/订阅是一种通信模式,允许发送者(pub)将...

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

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

    spring+springmvc+mybatis web项目

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

Global site tag (gtag.js) - Google Analytics