首页 / 要闻 / 加盟百科 / 「热部署项目」 在Java项目中热部署实现代码???求教

「热部署项目」 在Java项目中热部署实现代码???求教

2024.01.10 19:54

文章来源:顺利加盟网

阅读量:3
摘要:

热部署项目: 在Java项目中热部署实现代码???求教-百度知道 展开全部 idea有一个热部署的插件可以使用,叫JRebel for IntelliJ,只要不是修改项目的配置

热部署项目: 在Java项目中热部署实现代码???求教-百度知道

展开全部 idea有一个热部署的插件可以使用,叫JRebel for IntelliJ,只要不是修改项目的配置文件,都可以使用他来做热部署,不过是收费的,也有破解的,要自己研究一下怎么去破解额热部署快捷键:contorl+F9...

热部署项目: Python的web项目如何进行动态重载和热部署?

真正意义上的代码热部署应该是类似erlang那样的,将代码更新到节点后不停服务,不断连接的自动应用新代码。auto reload什么的还是会造成业务瞬间中断。我感觉是可以从wsgi容器级别上实现,比如更新代码后检测到文件变更,然后通知容器创建新的wsgi ...

其他答案:单纯从语言层次做到热加载不难。难的是web项目中,存储,后端逻辑service,静态文件等等许多相关的内容一起做到热加载。 回到热加载的目的,不停机。如1L所说的HA机制等就可以很好的解决这个问题。 再看看别人怎么说的。

热部署项目: myeclipse 热部署 tomcat 老重启??

你是设置了自动编译,当你修改并保存JAVA文件的时候就会自动编译了。。。在MYECLIPSE上面的PROJECT里头有个BUILD AUTO什么的,那个前面的勾去掉就不会自动编译了。。。当你修改了以后,点下BUILD ALL就会编译。。你可以试试 后面这个没明白是什么意...

其他答案:“部署已过期由于变化的基本项目 ,我需要手动'重新部署,以更新档案部署” 以上是你错误的正确翻译,能不能说一下你使用的tomcat是什么版本的么~?

热部署项目: 把项目部署到tomcat的ROOT目录下,如何配置热部署呢? 万分感谢!!

热部署:方法1:在tomcat\conf\中的内部添加标签: 方法2: 在 %tomcat_home%\conf\Catalina\localhost中添加一个XML文件,如:,内容如下:

其他答案:热部署:方法1:在tomcat\conf\中的<host></host>内部添加<context/>标签: <context debug="0" docbase="d:\demo1\web" path="/demo1" privileged="true" reloadable="true"/> 方法2: 在 %tomcat_home%\conf\catalina\localhost中添加一个xml文件, 如:,内容如下: <?xml version="" encoding="utf-8"?> <context docbase="d:\demo1\web" reloadable="true" />

热部署项目:Python的web项目如何进行动态重载和热部署?

真正意义上的代码热部署应该是类似erlang那样的,将代码更新到节点后不停服务,不断连接的自动应用新代码。auto reload什么的还是会造成业务瞬间中断。我感觉是可以从wsgi容器级别上实现,比如更新代码后检测到文件变更,然后通知容器创建新的wsgi application的实例,之后所有新的请求都发送到新的wdgi application实例上。等旧wsgi application实例的最后一个请求返回后就将其回收掉。不过貌似没有看到类似的实现

热部署项目:springboot如何进行热部署?

两种热部署方式:

(1)通过SpringLoader插件

(2)通过SpringLoader的jar包

自动重新部署方式:DevTools工具

方式一:通过SpringLoader插件实现热部署

(1)添加SpringLoader插件的依赖:

<!-- springloader插件 -->

<build>

<plugins>

<plugin>

<groupId></groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

<dependencies>

<dependency>

<groupId></groupId>

<artifactId>springloaded</artifactId>

<version></version>

</dependency>

</dependencies>

</plugin>

</plugins>

</build>

(2)通过Maven命令启动SpringBoot之后,修改并保存的后端代码都会立刻热部署上去:springboot:run

方式二:通过springloader的jar包进行热部署

(1)在项目中新建目录lib,将springloader的jar包添加进去;

(2)在启动类中,右键→run configuration→Arguments,在VM arguments中输入命令:-javaagent:.\lib\ -noverify


希望我的回答对你有帮助~

获取更多知识点可以转发分享+关注,每天更新最有用的知识点

热部署项目:android热部署是什么意思?

在 Java 开发领域,热部署一直是一个难以解决的问题,目前的 Java 虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,对类重新加载才能完成更新操作。对于某些大型的应用来说,每次的重启都需要花费大量的时间成本。虽然 osgi 架构的出现,让模块重启成为可能,但是如果模块之间有调用关系的话,这样的操作依然会让应用出现短暂的功能性休克。本文将探索如何在不破坏 Java 虚拟机现有行为的前提下,实现某个单一类的热部署,让系统无需重启就完成某个类的更新。

类加载的探索

首先谈一下何为热部署(hotswap),热部署是在不重启 Java 虚拟机的前提下,能自动侦测到 class 文件的变化,更新运行时 class 的行为。Java 类是通过 Java 虚拟机加载的,某个类的 class 文件在被 classloader 加载后,会生成对应的 Class 对象,之后就可以创建该类的实例。默认的虚拟机行为只会在启动时加载类,如果后期有一个类需要更新的话,单纯替换编译的 class 文件,Java 虚拟机是不会更新正在运行的 class。如果要实现热部署,最根本的方式是修改虚拟机的源代码,改变 classloader 的加载行为,使虚拟机能监听 class 文件的更新,重新加载 class 文件,这样的行为破坏性很大,为后续的 JVM 升级埋下了一个大坑。

另一种友好的方法是创建自己的 classloader 来加载需要监听的 class,这样就能控制类加载的时机,从而实现热部署。本文将具体探索如何实现这个方案。首先需要了解一下 Java 虚拟机现有的加载机制。目前的加载机制,称为双亲委派,系统在使用一个 classloader 来加载类时,会先询问当前 classloader 的父类是否有能力加载,如果父类无法实现加载操作,才会将任务下放到该 classloader 来加载。这种自上而下的加载方式的好处是,让每个 classloader 执行自己的加载任务,不会重复加载类。但是这种方式却使加载顺序非常难改变,让自定义 classloader 抢先加载需要监听改变的类成为了一个难题。

不过我们可以换一个思路,虽然无法抢先加载该类,但是仍然可以用自定义 classloader 创建一个功能相同的类,让每次实例化的对象都指向这个新的类。当这个类的 class 文件发生改变的时候,再次创建一个更新的类,之后如果系统再次发出实例化请求,创建的对象讲指向这个全新的类。

下面来简单列举一下需要做的工作。

创建自定义的 classloader,加载需要监听改变的类,在 class 文件发生改变的时候,重新加载该类。

改变创建对象的行为,使他们在创建时使用自定义 classloader 加载的 class。

自定义加载器的实现

自定义加载器仍然需要执行类加载的功能。这里却存在一个问题,同一个类加载器无法同时加载两个相同名称的类,由于不论类的结构如何发生变化,生成的类名不会变,而 classloader 只能在虚拟机停止前销毁已经加载的类,这样 classloader 就无法加载更新后的类了。这里有一个小技巧,让每次加载的类都保存成一个带有版本信息的 class,比如加载 时,保存在内存中的类是 Test_,当类发生改变时,重新加载的类名是 Test_。但是真正执行加载 class 文件创建 class 的 defineClass 方法是一个 native 的方法,修改起来又变得很困难。所以面前还剩一条路,那就是直接修改编译生成的 class 文件。

利用 ASM 修改 class 文件

可以修改字节码的框架有很多,比如 ASM,CGLIB。本文使用的是 ASM。先来介绍一下 class 文件的结构,class 文件包含了以下几类信息,一个是类的基本信息,包含了访问权限信息,类名信息,父类信息,接口信息。第二个是类的变量信息。第三个是方法的信息。ASM 会先加载一个 class 文件,然后严格顺序读取类的各项信息,用户可以按照自己的意愿定义增强组件修改这些信息,最后输出成一个新的 class。

首先看一下如何利用 ASM 修改类信息。

清单 1. 利用 ASM 修改字节码

ClassWriter cw = new ClassWriter(_MAXS);

ClassReader cr = null;

String enhancedClassName = ();

try {

cr = new ClassReader(new FileInputStream(

()));

} catch (IOException e) {

();

return null;

}

ClassVisitor cv = new EnhancedModifier(cw,

(".", "/"),

(".", "/"));

(cv, 0);

文章来源:顺利加盟网

风险提示及免责条款

[温馨提示] 文章来源于顺利加盟网,转载注明原文出处,此文观点与查生意无关,理性阅读,版权属于原作者若无意侵犯媒体或个人知识产权,请联系我们,本站将在第一时间删掉 ,查生意仅提供信息存储空间服务。

发表评论 (0)
0/200
暂无评论哦,快来评论一下吧!