2019独角兽企业重金招聘Python工程师标准>>>

JDK1.5之后提供了java.lang.instrument.Instrumentation,即java agent机制能够实现类的redefinition和retransform。

redefinition对应Instrumentation.redefineClasses()能够实现类的热替换,但遗憾的是功能很有限。

?
1
2
3
4
The redefinition may change method bodies, the constant pool and attributes.
The redefinition must not add, remove or rename fields or methods, change the
signatures of methods, or change inheritance.  These restrictions maybe be
lifted in future versions.

最近遇到一个开源项目spring-loaded,看了下官方的介绍文档:发现它功能比JDK自带的强大多了。

?
1
2
3
4
5
6
7
Spring Loaded is a JVM agentforreloadingclassfile changes whilst a JVM is running.
It transforms classes at loadtime to make them amenable to later reloading.
Unlike'hot code replace'which only allows simple changes once a JVM is running
(e.g. changes to method bodies), 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 inenumtypes.

经过自己的尝试,发现使用spring-loaded项目,确实可以实现java应用的热部署。下面介绍下如何将spring-loaded引入到项目中。我们可以运行下面的这段代码,然后修改A.say()方法,看看在不重启JVM的情况下,是否能够动态改变。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
packagetest;
importdemo.A;
publicclassTestPreMain
{
// -javaagent:springloaded-1.2.0.RELEASE.jar -noverify
publicstaticvoidmain(String[] args)throwsException
{
A a =newA();
while(true)
{
a.say();
Thread.sleep(3000);
}
}
}

为了使用spring-loaded实现热部署,我们只需要在启动JVM的时候,增加如下的启动参数即可

?
1
-javaagent:springloaded-1.2.0.RELEASE.jar -noverify

如果是通过eclipse启动,那么可以在run confiuration中进行设置 

接下来我们看下如何在tomcat中使用spring-loaded实现war包的热部署。将 下载 的springloaded-1.2.0.RELEASE.jar放到%TOMCAT_HOME%/bin/目录下,然后修改该目录下的catalina.bat

?
1
set JAVA_OPTS=-javaagent:springloaded-1.2.0.RELEASE.jar -noverify

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

转载于:https://my.oschina.net/pvpCC9IFwqz4/blog/503782

使用spring-loaded开源项目,实现java程序和web应用的热部署相关推荐

  1. spring boot 开源项目汇总

    spring boot 开源项目汇集 一.spring-boot-examples 项目 项目主页 https://github.com/ityouknow/spring-boot-examples ...

  2. idea 启动SpringBoot项目出现java程序包:xxx不存在

    启动SpringBoot项目出现java程序包:xxx不存在,然而这个包确实存在 方法一:使用Maven构建项目,构建过程比较慢 指定位置打上对勾,即可 2.方法二:清除idea缓存,重新构建索引,此 ...

  3. 一大波震撼的资源向你袭来,优秀的Spring Boot开源项目,你值得拥有!

    史上最全的spring cloud 开源项目 1.mall-SpringBoot+MyBatis 电商系统 mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyB ...

  4. Spring boot开源项目之个人博客(12)—分类(标签)管理

    Spring boot开源项目之个人博客(12)-分类(标签)管理 分类.标签管理功能高度重合,就只记录分类管理.分类管理主要涉及到了增删查改和前端分页展示的功能,还有一些零碎的非空验证.重复验证等. ...

  5. Spring boot开源项目之个人博客(11)—登录功能实现

    Spring boot开源项目之个人博客(11)-登录功能实现 这部分就把一下重要的点记录一下. 前端表单非空验证 <script>$('.ui.form').form({fields:{ ...

  6. Spring Boot学习总结(20)——提升开发效率之热部署

    1.模板热部署 在SpringBoot中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,则刷新页面是得不到修改后的页面的,因此我们可以在application.properties中关闭模版引 ...

  7. idea项目启动时刷新_[转]springboot+idea热部署(自动刷新)

    近来在使用idea做springboot的项目,但是发现每次修改之后我都需要重新将项目关闭再开启,这样比较繁琐,发现通过热部署的方式让我们可以一边修改我们的项目,然后在页面中直接通过刷新展示出来 sp ...

  8. Java开源项目:saas小程序商城(SpringCloud + Oauth2.0 + ShiroRedis + JWT + Gateway + Nacos + Nginx+Vue+Mysql)

    项目采用**SpringCloud **主流开源框架,,设计轻巧,使用简单,开发人员接手与二次开发简单易懂: 项目完成了对阿里云.腾讯云.微信生态的快速接入与代码示例,并成功运用到了商业中,方便大家学 ...

  9. 阿里巴巴集团的几十款著名开源项目(Java)

    来源:https://segmentfault.com/a/1190000017346799 1.分布式应用服务开发的一站式解决方案 Spring Cloud Alibaba Spring Cloud ...

最新文章

  1. pthreads v3在centos7下的安装与配置
  2. Zend API: array_init
  3. Ajax判断图片类型
  4. QTP从数据库中导出数据
  5. 前端js vue遇到的一些简单的数据处理-持续更新
  6. 光电转换器有什么作用?光纤收发器如何保养?
  7. 95-290-380-源码-内存管理-Buffer-NetworkBufferPool简介
  8. 单体内置对象_单体内置对象
  9. 对xml文件的增删改查及读写
  10. pythonic code_Pythonic Code (Part III)
  11. Java集合——题目
  12. 虚拟机linux启动是来宾账户,配置Openstack Nova以自动启动在主机重新引导之前运行的guest虚拟机...
  13. 在可部署到brew真机上的程序包构建完之后又要如何将该程序包发布到真机上呢...
  14. 通过日志对内存泄漏的检查
  15. Python格式控制之九九乘法表打印
  16. 中间件 | 负载均衡策略
  17. Doris ODBC外表使用
  18. java graphics类详解_Java中Graphics2D类的使用操作解析
  19. 贝叶斯网络经典matlab源代码解析
  20. 0x0000001a蓝屏代码是什么意思 0x0000001a蓝屏代码怎么解决

热门文章

  1. 直击5G的机遇与挑战,全新商业模式、规模化经济效益、最新技术进展…全解读...
  2. 刚刚、Gartner发布物联网技术十大战略和趋势
  3. 马化腾:我创办腾讯的这些年
  4. 大牛激辩:AI 该像婴儿一样生来就懂事,还是该从零学习?
  5. 我为什么强烈反对程序员加班?
  6. Unity “出圈”:游戏引擎的技术革新和跨界商机
  7. 我是一个秒杀请求,正在逃离这颗星球...
  8. 蚂蚁上市后,马云不是最大赢家,竟是她!
  9. 算法与数据结构大系列 - NO.1 - 插入排序
  10. Fundebug后端Java异常监控插件更新至0.2.0,支持Spring及Maven