文档章节

spring-loaded热部署

放手的风筝
 放手的风筝
发布于 2016/08/30 16:18
字数 521
阅读 160
收藏 1

什么是spring-loaded?

spring-loaded是一个对于jvm代理运行时期改变类文件的重载(重新加载),它转换类loadtime让他们服从后重新加载。不像“热代码替换”只允许一次简单的改变JVM运行(例如更改方法体)spring-loaded允许您添加/修改/删除/字段/方法构造函数。注释类型/方法/字段/构造函数也可以修改和可以添加/删除/修改值的枚举类型。

有什么好处?

  1. 开发测试阶段:能够在启动后动态更改代码调试,无需重启减少切换debug时间(ps:对于eclipse而言,在debug时期只能做到动态更新方法体不能增加)
  2. 对于线上测试发布阶段: 能够在出现问题后直接替换class文件而不重启应用(ps:对于外部提供的服务jar形式同样能做到)

怎么使用?

项目地址

https://github.com/spring-projects/spring-loaded

第一步:下载文件

http://repo.spring.io/release/org/springframework/springloaded/1.2.5.RELEASE/springloaded-1.2.5.RELEASE.jar

第二步:配置jvm启动参数

eclipse

eclipse:run as --> run configurations --> arguments -->> VM arguments
-javaagent:E:\repository\org\springframework\spring-load\springloaded-1.2.5.RELEASE.jar 
-noverify -Dspringloaded=verbose
详细描述:
-javaagent: 配置java代理使用下载后的jar包路径
-noverify: 禁用字节码验证
-Dspringloaded=verbose 显示springloaded时的详细信息

image

java命令启动

java -javaagent:E:\repository\org\springframework\spring-load\springloaded-1.2.5.RELEASE.jar -noverify Test 
类似

java jar包动态替换

1.打成runnable Jar
2.命令启动:

java -javaagent:E:\repository\org\springframework\spring-load\springloaded-1.2.5.RELEASE.jar -noverify -Dspringloaded=watchJars=main.jar main.jar

/**
 * 类Test.java的实现描述:TODO 类实现描述 
 * @author Administrator 2016年7月4日 下午4:55:59
 */
public class Test {
    public static void main(String[] args) throws InterruptedException {
    	
    	while(true) {
	    	try {
	    		println();
	    		Thread.sleep(1000);
			} catch (Throwable e) { 
				e.printStackTrace(); 
			}
    		
    	}
    	
    	
    }
    public static void println() { 
    	System.out.println("112222221222222");     
    }
    
}

改变为

/**
 * 类Test.java的实现描述:TODO 类实现描述 
 * @author Administrator 2016年7月4日 下午4:55:59
 */
public class Test {
    public static void main(String[] args) throws InterruptedException {
    	
    	while(true) {
	    	try {
	    		println();
	    		Thread.sleep(1000);
			} catch (Throwable e) { 
				e.printStackTrace(); 
			}
    		
    	}
    	
    	
    }
    public static void println() { 
    	System.out.println("test replace jar");     
    }
    
}

3.重新打包替换
PS:实测在window下无用
手上无linux机器待测试

© 著作权归作者所有

放手的风筝
粉丝 14
博文 60
码字总数 50362
作品 0
浦东
程序员
私信 提问
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
实现Java热部署的几种解决方案

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

mario阿东
2018/03/25
0
0
spring boot修改代码后无需重启设置,在开发时实现热部署

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

微wx笑
2018/04/13
0
0
Spring Boot干货系列:(十)开发常用的热部署方式汇总

文章来源:点击打开链接 前言 平时开发Sprig Boot的时候,经常改动个小小的地方就要重新启动项目,这无疑是一种很差的体验。在此,博主收集了3种热部署的方案供大家选择。 正文 目前博主用过...

u012843873
2018/05/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

利用mybatis generator生成实体类、Mapper接口以及对应的XML文件

项目中通常会遇到数据的持久化,如果是采用mybatis的orm,就会涉及到生成xml的问题,刚好mybatis官网提供了这么个插件MyBatis Generator,效果简直是棒呆。 1. 首先需要在build.gradle文件中...

啊哈关关
今天
2
0
SpringSocial相关的知识点

使用SprigSocial开发第三方登录 核心类 ServiceProvider(AbstractOauth2ServiceProvider):主要负责实现server提供商(例如QQ,微信等共有的东西),默认实现类是AbstractOauth2ServiceProvider...

chendom
今天
1
0
Java并发之AQS详解

一、概述   谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!   类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源...

群星纪元
昨天
2
0
Fabric-sdk-java最新教程

Fabric Java SDK是Fabric区块链官方提供的用于Java应用开发的SDK,全称为Fabric-sdk-java,网上可用资料不多,本文列出了精心整理的针对Fabric Java SDK的最新精选教程。 如果希望快速掌握F...

汇智网教程
昨天
2
0
react 子组件监听props 变化

componentWillReceiveProps //已经被废弃 getDerivedStateFromProps// 推荐使用//如果条件不存在必须要返回null static getDerivedStateFromProps(props, current_stat...

一箭落旄头
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部