`

springMVC工程使用jreloader实现热部署

 
阅读更多
springMVC工程使用jreloader实现热部署

applicationContext - ContextLoaderListener重新加载

DispatcherServlet 重新加载

提高开发效率

1: jreloader 是class的热加载器

(1) 从网上下载jreloaderjar包

(2) 在运行配置中的vm参数中添加

-noverify -javaagent:./jreloader.jar - Djreloader.dirs=./target/classes

Djreloader.dirs 是class的路径,多个路径使用逗号隔开

2:继承org.springframework.web.context.ContextLoaderListener重写contextInitialized的方法

import javax.servlet.ServletContextEvent;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.AbstractRefreshableApplicationContext;

import org.springframework.web.context.ContextLoaderListener;

import org.springframework.web.context.support.WebApplicationContextUtils;

public class WebContextListener extends ContextLoaderListener {

private static Logger logger = LoggerFactory.getLogger("Init");

public static ApplicationContext applicationContext;

public static ServletContextEvent servletContextEvent;

/**

* 获取spring 初始化的bean

*

* @param name

* @param requiredType

* @return

* @throws Exception

*/

public static T getBean(String name, Class requiredType)

throws Exception {

return applicationContext.getBean(name, requiredType);

}

/**

* 获取属性bean

*

* @param name

* @return

* @throws Exception

*/

public static Object getBean(String name) throws Exception {

return applicationContext.getBean(name);

}

@Override

public void contextInitialized(ServletContextEvent event) {

/** 初始化bean **/

super.contextInitialized(event);

/** 初始化context 和event **/

applicationContext = WebApplicationContextUtils

.getRequiredWebApplicationContext(event.getServletContext());

servletContextEvent = event;

/** 打印SUCCESS图案 **/

logger.info("*******************");

logger.info("**---------------**");

logger.info("**--***********--**");

logger.info("**--*---------*--**");

logger.info("**--*-SUCCESS-*--**");

logger.info("**--*---------*--**");

logger.info("**--***********--**");

logger.info("**---------------**");

logger.info("*******************");

}

/**

* applicationContext的reload

*/

public static void reloadApplicationContext() {

AbstractRefreshableApplicationContext abstractRefreshableApplicationContext = (AbstractRefreshableApplicationContext) applicationContext;

logger.info("start refresh the application context");

abstractRefreshableApplicationContext.refresh();

/** 打印SUCCESS图案 **/

logger.info("*******************");

logger.info("**---------------**");

logger.info("**--***********--**");

logger.info("**--*-REFRESH-*--**");

logger.info("**--*---------*--**");

logger.info("**--*-SUCCESS-*--**");

logger.info("**--***********--**");

logger.info("**---------------**");

logger.info("*******************");

logger.info("reload the application context success");

}

}

3:继承org.springframework.web.servlet.DispatcherServlet,添加refreshes方法,重写init方法

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.web.servlet.DispatcherServlet;

public class MVCServlet extends DispatcherServlet {

private static final long serialVersionUID = 1L;

private static MVCServlet servlet;

private static Logger logger = LoggerFactory.getLogger("Init");

@Override

public void init(ServletConfig config) throws ServletException {

super.init(config);

servlet = this;

/** 打印SUCCESS图案 **/

logger.info("*******************");

logger.info("**---------------**");

logger.info("**--***********--**");

logger.info("**--*---------*--**");

logger.info("**--*-SUCCESS-*--**");

logger.info("**--*---------*--**");

logger.info("**--***********--**");

logger.info("**---------------**");

logger.info("*******************");

}

public static void refreshes(){

servlet.refresh();

}

}

4:添加重载的Controller

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

import com.ustcinfo.edi.datacfg.web.listener.WebContextListener;

import com.ustcinfo.edi.datacfg.web.servlet.MVCServlet;

@Controller

@RequestMapping("/reload")

public class ReloadController {

@ResponseBody

@RequestMapping("/reloadSpringController")

public String reloadSpringController() {

MVCServlet.refreshes();

return "success";

}

@ResponseBody

@RequestMapping("/reloadSpringContext")

public String reloadSpringContext() {

WebContextListener.reloadApplicationContext();

return "success";

}

}

5: 修改web.xml里面listener和servlet指向的class是上面两个重载的类

通过以上5个步骤,使用jreloader实现JVM中class的热加载,通过继承 org.springframework.web.context.ContextLoaderListener可以细线spring的配置bean的重载,通过继承org.springframework.web.servlet.DispatcherServlet,实现所有的Controller的重载,这样在开发过程中就可以完全实现热部署,不需要频繁的启动。重载的方法就是在浏览器里面输入那两个Controller的路径。

在一些大的工程中,启动一次耗费的代价太大,有的需要几分钟,一天的开发中需要频繁的重启,8个小时有1个小时在等待,通过上面的5个步骤可以实现热部署,一天节省1个小时的等待时间,提高开发的效率是很有必要的。
分享到:
评论

相关推荐

    springMVC样例、jreloader实现tomcat热部署

    接着,我们要介绍jreloader如何实现Tomcat的热部署。jreloader通过监听文件系统,一旦发现被监控的类文件发生变化,就会触发类的重新加载。它的工作原理是在Tomcat的生命周期中插入一个监听器,当检测到应用中的类...

    企业级开发-SpringMVC使用拦截器实现用户登录权限验证实验报告.docx

    在企业级开发中,SpringMVC 是一个广泛使用的框架,用于构建高效、模块化和可测试的 Web 应用程序。本实验报告将探讨如何利用 SpringMVC 的拦截器(Interceptor)来实现用户登录权限验证,确保只有已登录的用户才能...

    SpringMVC注册功能的实现.docx

    在 SpringMVC 框架中,我们可以使用 `@RequestMapping` 注解来映射注册请求,并使用 `ModelAndView` 对象来返回成功页面。 3.2 注册失败 在注册失败的情况下,我们需要显示错误信息,以便用户了解注册失败的原因。...

    建立SpringMvc工程.doc

    SpringMvc 工程建立指南 SpringMvc 是一个基于 Java 语言的轻量级 Web 框架,它提供了一个灵活的基础设施来构建 Web 应用程序。在这个指南中,我们将详细介绍如何建立一个 SpringMvc 工程,并配置相关的依赖项和...

    springmvc工程简单模板

    在本"springmvc工程简单模板"中,我们看到它是一个基础的 Spring MVC 项目配置,适合初学者快速上手使用。 1. **Spring MVC 概述** Spring MVC 通过提供一种模型-视图-控制器架构模式,将业务逻辑、数据和用户界面...

    Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码.zip

    Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码,SSM+Vue的学生管理系统。 Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码,SSM+Vue的学生管理系统。 Java基于Spring+SpringMVC+...

    springMVC纯净工程

    在这个“springMVC纯净工程”中,可能已经集成了BigPipe的实现,通过SpringMVC的Controller和视图解析机制,将页面分割成多个部分,每个部分作为一个单独的HTTP请求处理。当用户请求页面时,SpringMVC会处理这些请求...

    SpringMVC工程

    本文将深入探讨SpringMVC和MyBatis在项目开发中的核心概念、配置及其实现方式。 首先,SpringMVC作为模型-视图-控制器(MVC)架构模式的一种实现,主要负责处理HTTP请求,通过DispatcherServlet进行调度,然后由...

    springMVC配置连接数据库实现登录功能的一个小demo

    在这个"springMVC配置连接数据库实现登录功能的小demo"中,我们将探讨如何使用Spring MVC与Hibernate集成来处理用户登录功能。Hibernate是一个流行的ORM(对象关系映射)框架,它简化了与数据库的交互。 首先,我们...

    基于SpringMVC+Hibernate实现的在线购物商城.zip

    基于springmvc+Hibernate实现的在线购物商城.zip基于springmvc+Hibernate实现的在线购物商城.zip基于springmvc+Hibernate实现的在线购物商城.zip基于springmvc+Hibernate实现的在线购物商城.zip基于springmvc+...

    SpringMVC的Socket实现+Java Tomcat websocket实现+Java Socket通信实现 +Java UDP通信实现

    SpringMVC的Socket实现+Java Tomcat websocket实现+Java Socket通信实现 +Java UDP通信实现。websocket_study.rar 为springMVC版本的socket实现 websocket02.rar 里面包含tomcat的websocket实现+java socket双向通信...

    非常详细的用 java(springmvc+mybatis)实现excel导入功能并且保存到数据库

    在本实例中,使用了SpringMVC框架来实现Web应用程序。SpringMVC是一种基于Java的Web应用程序框架,提供了一个灵活的方式来构建Web应用程序。它提供了一个Model-View-Controller(MVC)架构,允许开发者将应用程序...

    eclipse + maven多模块项目 + SpringMVC + jetty热部署实现验证码图片实例源码

    应网友要求,重新整理原《eclipse + maven多模块项目框架 + jetty热部署的实例源码》,增加了各配置的详细注释。 并且基于Spring MVC提供了一个完整功能:实现了生成验证码图片,以及验证输入是否匹配的两个接口,...

    springMVC+dwr技术实现消息推送实例

    SpringMVC作为Spring框架的一部分,主要用于构建后端服务,而DWR则是一种JavaScript库,允许JavaScript与Java服务器进行实时通信,实现了类似Ajax的功能但更高效。本实例将展示如何结合两者来实现实时的消息推送。 ...

    SpringMVC完整使用教程

    本教程将深入探讨 SpringMVC 的核心功能和使用方法。 ### 第 1 章 SpringMVC 概述 SpringMVC 旨在简化 Web 开发,通过解耦控制器、服务、业务逻辑和视图,提高代码的可测试性和可维护性。其核心组件包括 ...

    spring+springmvc+mybatis项目案例实现用户角色权限管理

    使用spring+springmvc框架 整合了Mybatis持久层框架 整合Druid用于数据库连接,并使用Druid对业务层监控spring jdbc 整合EhCache,对Mybatis的二级缓存进行管理和对spring进行缓存管理 整合FastJson对指定http类型的...

    spring+springMvc简单实现SSO单点登录

    利用springMvc 实现的简单的单点登录Demo,内含三个小Mavn项目分别是 1、认证中心SSOServer 2、子系统1SSOClient1 3、子系统2SSOClient2 文章请参考 http://blog.csdn.net/qq_31183297/article/details/79419222

    springMVC简单工程搭建

    springMVC简单工程搭建,包含jar包,有静态文件,lib包,controller,service,dao层创建,结构清晰明了。并有简单controller想页面传数据的简单案例,十分适合初学者学习,对应的原理和工程搭建步骤介绍可见...

    springMVC工程实例及讲解文档

    在实际运行工程时,确保Tomcat服务器已经安装并配置好,将工程部署到Tomcat的webapps目录下,然后启动服务器,就可以通过浏览器访问SpringMVC应用了。 总的来说,SpringMVC工程实例涵盖了SpringMVC的基本使用、配置...

    Intelli idea 创建 SpringMVC 工程

    **SpringMVC 框架在 IntelliJ IDEA ...以上就是使用 IntelliJ IDEA 创建 SpringMVC 工程的基本流程及关键知识点,希望对你有所帮助。在实际开发过程中,还需要根据项目需求灵活调整配置和代码结构,以满足特定的需求。

Global site tag (gtag.js) - Google Analytics