请教下 Java 热替换代码的技术

2022-09-23 10:55:09 +08:00
 8629
场景:把接收处理数据的类 源码放在 web 后台页面中在线编辑,编辑完这个类直接提交到 redis 中。然后线上服务就替换了这部分代码,不需要打包发布实现了更新服务。
请问这是什么技术,什么关键字可以查询,有没有现成的 demo 可以学习下。感谢!
5909 次点击
所在节点    Java
59 条回复
xiangxiangxiang
2022-09-23 11:51:30 +08:00
groovy 脚本+1 之前有场景就是 m 端维护 /发布代码块,然后在 c 端动态加载生效
Vegetable
2022-09-23 11:53:56 +08:00
标准的 RPC API 、自动构建、容器化
virusdefender
2022-09-23 12:01:08 +08:00
yuanliubei
2022-09-23 12:25:35 +08:00
coala
2022-09-23 12:28:56 +08:00
类似 JSP 呗.
q1angch0u
2022-09-23 12:31:31 +08:00
grpovy 啊…
paullee
2022-09-23 12:35:04 +08:00
花这些功夫,用 k8s 部署,滚动更新,不是更舒服?
ggbond2
2022-09-23 12:35:09 +08:00
humpy
2022-09-23 12:54:53 +08:00
可以做,jdk 提供了 JavaCompiler ,可以在运行时编译代码,将编译后的代码存在内存里,再实现一个 ClassLoader ,就能加载刚编译的类了。

可以参考一下这篇文章,好像是微博的老师写的:
https://zhenbianshu.github.io/2019/12/play_with_java_dynamic_compile.html
humpy
2022-09-23 12:56:03 +08:00
misaka19000
2022-09-23 13:10:52 +08:00
可以用 ASM 动态替换字节码来做,或者用 ByteBuddy 使用更高级一些的 API
molika
2022-09-23 13:35:39 +08:00
jvm 上用 Clojure 天生支持
codehz
2022-09-23 13:38:36 +08:00
还记得之前的 jndi 漏洞吗(
听着就是在造 RCE(
xuanbg
2022-09-23 13:45:54 +08:00
能搞!办法还不少,但没一个是安全的。想想也知道,这就相当于代码不经过审查和测试就直接上线,我写几个漏洞也是没什么问题的吧?谁还不写几个 bug 呢。。。
nothingistrue
2022-09-23 13:54:19 +08:00
@wangxiaoaer #8
@superchijinpeng #10
仔细看:“编辑完这个类直接提交到 redis 中”,“不需要打包”。这是想源码一步到底的,Classloader 可 load 不了。
superchijinpeng
2022-09-23 14:18:05 +08:00
@nothingistrue URLClassLoader ,参考 Spark 或者 Flink 动态注册或移除 UDF
zhang77555
2022-09-23 14:24:58 +08:00
JavaCompiler 把代码编译成 class 然后 URLClassLoader 加载
建议定好接口和编码模板校验,免得这部分功能被滥用
selca
2022-09-23 14:27:00 +08:00
@codehz #33 私有的东西,目的就是造一个门去调,如果操作者能控制好鉴权,还是没问题的
dddyyyttt
2022-09-23 14:55:04 +08:00
为什么没人提 arthas ?
wangxiaoaer
2022-09-23 14:55:43 +08:00
@nothingistrue 我理解他的意思是 java 代码存到 redis ,但是肯定不能和直接用,后台可以从 redis 读这些代码编译,替换。

如果想直接从 redis 加载 java 文件就替换运行,那肯定是不行的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/882334

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX