yuankui
2019-07-24 15:08:15 +08:00
我们之前,有个 spring 应用,启动很慢,我专门统计了下每个 bean 的初始化时间长。后来发现主要是以下几类:
- 那些需要远程连接服务进行初始化的,比如 RPC 连接初始化
- 那些需要加载大量数据到内存中的(比如建立一个字典)
所以,要想应用实现热加载,关键是让应用无状态,这就是 php 的主要是方式。
另外一个就是状态向后兼容,比如之前内存保存在一个对象 class A(a,b,c),后面加了个字段 class A'(a,b,c,d),目前 jvm 里面还没有工具支持,将这种数据 A 对象升级成 A'对象,但是实际上,让人来做,是可以做的。js 是可以的,因为 js 运行时全是 object ( kv ),天然具有向后兼任性。所以即使 js 应用,有状态,数据还是能做到兼容,不需要重启。
所以综上,主要是问题其实不是 Java 的问题,而是框架的问题,也就是 spring 的问题。(楼上不是有人说 play 支持热加载吗?我没具体看啥原理哈)
可能目前这个还不是痛点,就是大家遇到了,也是尽量先不启动应用进行开发,而是进行“单元开发”=》“单元测试”
等差不多了, 在起应用,然后这个时候,即使有小 bug,也可以利用 IDE 的动态加载,将 body 体里面的实现替换,这个是不需要重启的。