- CentOS 7版本,CentOS是一个Linux的主流发行版本,并且内置了一些服务管理的能力(Systemctl),用于后续的服务发布和管理
- 优势:目前基本所有的主流云产商都是支持的
- 缺点:目前没有明显的大缺陷会影响服务部署和使用
- 总结:建议大家选择CentOS 7,如果还没有从CentOS6、CentOS5升级的可以进行升级
- jdk11(2018-09-25正式发布)是自jdk8之后的首个长期支持版本(LTS),现在虽然jdk8是主流,但是相信之后大家也会逐步切换到jdk11的
- 优势:jdk11引入了一些新的特性,并且对于对比于jdk8,gc算法使用G1作为了默认的gc算法,并且引入了少量的新特性。目前主流的基础框架SpringBoot和SpringCloud的新版本都已经支持JDK11
- 劣势:由于jdk11删除了一些默认包,导致从jdk8到jdk11的过程中会遇到无法找到一些Class的异常
- 遇到的坑:
- 一些老版本的ide不支持jdk11的编译,需要进行ide升级
- 一些框架依赖jre里面的包,但是在jdk11里面被删除了,需要通过依赖显示引入
- 少量第三方的
Encode
或者Decode
算法,使用了jdk以前的sun.misc
包里面的方法,还有一些使用了jdk里面的tools
包,现在jdk11没有这些包了,导致程序出错。目前有仅仅遇到一些银行提供的包还在使用sun.misc
包,并且没有提供有效的解决方案。 - 一些大数据相关的组件(flink),目前还不支持jdk8
- 总结:如果是微服务开发,可以选择进行升级,绝大部分框架或组件都支持jdk11,如果是大数据开发,不建议进行升级。由于工作中主要是为服务业务开发,所以已经完全升级到了jdk11
-
SpringBoot + SpringCloud 作为java语言微服务的标配,已经被大部分公司采用了,目前最新版本SpringBoot为2.1.3,SpringCloud为G系列,通过这两个大版本,基本可以覆盖80%依赖组件的版本,这样有利于统一版本管理。目前通过把SpringBoot + SpringCloud和剩余的20%基础依赖进行了一次二次封装,方便在公司内部进行版本管理和持续的升级所依赖的基础框架 loc-framework
-
优势:绝大部分的微服务功能目前Spring全家桶都可以覆盖,大大降低了开发成本,并且社区活跃,对于绝大部分的场景都有现成的解决方案,并且通过SpringBoot可以使得部署非常方便。
-
劣势:整套技术所依赖的组件过多,大部分业务开发人员不需要掌握所有的东西,所以可以通过上面说的二次封装进行进一步的整体打包,屏蔽技术细节和统一版本
-
总结:如果能够使用好SpringBoot + SpringCloud可以是的整个团队的效率大大提高。所以我个人认为SpringBoot + SpringCloud也是目前java语言微服务落地方案中最优选择。
很多人问如何选择使用开源框架的什么版本?我建议是选择最新的稳定版本。有些人怕最新版本会有问题,不稳定。其实只要是一个活跃稳定的开源项目,如果这个版本有bug,那么一定会有人先遇到,并且提供解决方案。如果你是第一个遇到问题的人,那么恭喜你,你可以把问题上报给作者,或者自己修复提交pr给作者,也算对开源框架的贡献。
关于bug的问题,其实新版本和老版本都会有bug,新版本解决老版本的bug,并且也可能会引入新的bug。所以只要是正式稳定版本,我觉得就可以大胆使用,并且正视问题并且积极解决。
希望大家在使用框架的同时一定要多多关注版本号。这样对之后排查问题也是很大的帮助。