文档章节

使用spring-loaded实现应用热部署

风象南
 风象南
发布于 2016/07/29 15:23
字数 641
阅读 135
收藏 6

作为一名Java开发者您是否会遇到这种情况:新增一个方法或字段必须重启tomcat才能对其进行调试?

有没有办法使得不重启tomcat就能调试呢.spring-loaded就可以.

相似产品(Jreloader : http://blog.csdn.net/suwing6406029/article/details/37996035)

 

spring-loaded是一个开源项目,项目地址:https://github.com/spring-projects/spring-loaded

且看下面这一段话:

Spring Loaded allows you to add/modify/delete methods/fields/constructors. The annotations on types/methods/fields/constructors can also be modified and it is possible to add/remove/change values in enum types.

意思是它允许你动态得新增/修改/删除某个方法/字段/构造方法,同样可以修改作用在类/方法/字段/构造方法上的注解.也可以新增/删除/改变枚举中的值.

 

下面我们就来实验一把.

1.下载spring-loaded,我这里下在的是springloaded-1.2.5.RELEASE.jar,把jar放在C盘根目录

2. eclipse新建一个web工程,名为testsl,注意添加tomcat对应jar

2. 新建一个Servlet,名为TestServlet,内容如下:

 

[java] view plain copy

print?

  1. import java.io.IOException;  
  2. import javax.servlet.ServletException;  
  3. import javax.servlet.http.HttpServlet;  
  4. import javax.servlet.http.HttpServletRequest;  
  5. import javax.servlet.http.HttpServletResponse;  
  6.   
  7. public class TestServlet extends HttpServlet {  
  8.     private static final long serialVersionUID = 1L;  
  9.   
  10.     protected void doGet(HttpServletRequest request,  
  11.             HttpServletResponse response) throws ServletException, IOException {  
  12.         response.getWriter().println("hello world");  
  13.     }  
  14.   
  15. }  


3. 右键项目->Run as->Run configurations... 在tomcat启动项添加VM参数-javaagent:C:/springloaded-1.2.5.RELEASE.jar -noverify

 

 

4. 启动tomcat,浏览器输入http://localhost/testsl/TestServlet

此时会正常打印hello world

5. server.xml 修改

<Context docBase="test" path="/test" reloadable="false" source="org.eclipse.jst.jee.server:test"/>      

reloadable="true" 改为   reloadable="false"

5. 在TestServlet中添加一个方法和一个属性,如下

 

[java] view plain copy

print?

  1. public class TestServlet extends HttpServlet {  
  2.     private static final long serialVersionUID = 1L;  
  3.   
  4.     protected void doGet(HttpServletRequest request,  
  5.             HttpServletResponse response) throws ServletException, IOException {  
  6.         response.getWriter().println("hello world");  
  7.         response.getWriter().println(this.getName());  
  8.     }  
  9.       
  10.     private String name = "Jim";  
  11.       
  12.     public String getName() {  
  13.         return name;  
  14.     }  
  15.   
  16. }  


修改完后,直接刷新浏览器,此时会打印

 

 

hello world
Jim

 

这样,我们不用重启tomcat就能直接调试程序了.

 

上文所说的是spring-loaded在开发模式中的使用.接下来在讲下线上模式如何使用.

 

线上模式使用原理跟开发模式一样

1. 把springloaded-1.2.5.RELEASE.jar放到tomcat的bin文件夹下

2. 打开bin下的catalina.bat,添加如下一句

set JAVA_OPTS=-javaagent:springloaded-1.2.5.RELEASE.jar -noverify

这样就完成了spring-loaded的安装,能够检测tomcat下部署的webapp,在不重启tomcat的情况下,实现应用的热部署。 

关于多项目的自动加载:

可通过eclipse的Build Path -> Source -> Link Source 来实现。选定到依赖项目的src目录上,如果为maven或者gradle项目 需要选择到 src/main/java 目录上。

 

 

本文转载自:http://blog.csdn.net/thc1987/article/details/50203149

共有 人打赏支持
下一篇: Druid 监控配置
风象南
粉丝 70
博文 267
码字总数 33764
作品 1
西安
技术主管
私信 提问
Spring Boot发布与部署 - 开发热部署

Spring Boot 支持页面与类文件的热部署。 spring-boot-devtools 实现热部署 spring-boot-devtools 最重要的功能就是热部署。它会监听 classpath 下的文件变动,并且会立即重启应用。 值得注意...

yzbty23
2018/04/27
0
0
【Spring Boot】28.开发热部署

简介 在开发中我们修改一个Java文件后想看到效果不得不重启应用,这导致大量时间花费,我们希望不重启应用的情况下,程序可以自动部署(热部署)。有以下四种情况,如何能实现热部署。 模板引...

落花时节又逢卿
2018/12/28
0
0
spring boot修改代码后无需重启设置,在开发时实现热部署

Spring Boot在开发时实现热部署(开发时修改文件保存后自动重启应用)(spring-boot-devtools) 热部署是什么 大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改...

微wx笑
2018/04/13
0
0
实现Java热部署的几种解决方案

百度百科:热部署,就是应用正在运行的时候就可以升级软件,而不需要重新启动应用。 spring-loaded 依赖 ps:据说此方法还需要手动编译(),请亲测! spring-boot-devtools 依赖 JRebel 安装...

mario阿东
2018/03/25
0
0
Spring Boot在开发时实现热部署(开发时修改文件保存后自动重启应用)(spring-boot-devtools)

热部署是什么 大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果,往往需要重启应用查看改变效果,其实就是重新编译生成了新的Class文件,这个文件里记录着...

easonjim
2017/09/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

常用缓存淘汰算法

LFU(Least Frequently Used)算法根据数据的历史访问频率来淘汰数据,其核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”。 LRU(Least recently used,最近最少使用)算...

wangmarke
7分钟前
0
0
linux查看系统配置,例如一级缓存总大小、一级缓存行大小

chuqq@chuqq-vb:~$ getconf -a|grep CACHELEVEL1_ICACHE_SIZE 32768LEVEL1_ICACHE_ASSOC 8LEVEL1_ICACHE_LINESIZE 64LEVEL1_DCACHE_SIZE ......

chuqq
10分钟前
0
0
全职ui设计师岗位需要具备哪些工作技能

好的UI设计不仅是让软件变得有个性有品位,还要让软件的操作变得舒适简单、自由,充分体现软件的定位和特点。Ui设计师可以让网页变的更美,让图片变的更真实,而今,ui设计师成了一个公司不可...

纤纤郡主
10分钟前
0
0
分布式之数据库和缓存双写一致性方案解析

先做一个说明,从理论上来说,给缓存设置过期时间,是保证最终一致性的解决方案。这种方案下,我们可以对存入缓存的数据设置过期时间,所有的写操作以数据库为准,对缓存操作只是尽最大努力即...

微笑向暖wx
15分钟前
0
0
正则验证整数或保留小数一位

if (!Regex.IsMatch(body.Quota.ToString(), "^[0-9]+([.][0-9]{1})$")) {}

Lytf
15分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部