为什么说 Java 程序员必须掌握 Spring Boot?

作者:hsmcomputer(在多家大公司里开发过Java,有分布式和云端开发经验,有架构方面的实践经验。)

本人在互联网公司和外企呆过,目前在上海一家外企做Java架构,平时偶尔做做Java技术面试官,周末还会讲兼职Java课,先通过如下的例子来说下Spring Boot对Java程序员的重要性。也就是说直接回答本问题,“为什么说 Java 程序员必须掌握 Spring Boot ?”
1. 不论哪个公司,基本上做Java方面的项目都会用到Spring Boot,目前用SSM框架的公司本人没见过纯粹Java+Jdbc项目更没听说过。
2.本人面试Java程序员,一般都问Spring Boot,外加分布组件的技能。
3.本人周末做兼职的学校,前几年还开.net课,现在就开Java和Python课,Java课前几年还会讲Spring MVC和SSM,甚至还讲过SSH,但现在就讲Spring Boot+分布式组件,或者Spring Cloud Alibaba框架。
也就是说,如果要做Java程序员,当下Spring Boot一定要学,下面说下为什么现在Spring Boot这么热门,也就是分析程序员必须掌握Spring Boot的原因。
1.之前的Spring MVC框架,比如SSM,相比于更老的JSP+Servlet+JavaBean框架,由于更好地封装了页面跳转逻辑,所以开发起来更方便,所以也流行过一段时间。
2.SSM框架虽然能很方便地开发各种增删改查业务,但要写很多XML配置文件,比如整合MyBatis要写XML配置,整合数据源和事务要写XML文件,整合Dubbo等分布式组件,也得写XML文件。也就是说,如果SSM等Spring MVC框架要引入其他模块,得写XML文件,通过XML配置相关参数。一个项目中,需要引入多个组件或引入多个功能模块,那么项目开发到后面,会有一大堆XML文件要维护,XML文件一多,不仅容易出错,更难排查问题。
相比之下,在Spring Boot框架里,可以通过注解来代替XML文件,从而引入各种功能点。比如可以通过引入@SpringBootApplication注解来定义启动类,引入@Transactional注解实现事务,引入 @entity和@Table注解来定义ORM映射。这样就能少写不少XML文件,便于开发和维护。
3.SSM框架项目开发好了以后,需要打包部署到Tomcat服务器上再运行,而Spring Boot能通过运行启动来启动并对外提供服务,所以从部署角度来看,Spring Boot也占优。
4.当下大多数项目,或许会考虑全栈开发,比如和App或前端整合,或者要考虑高并发,所以往往需要和Vuejs或各种分布式组件整合,而Spring Boot框架能更好地和诸多分布式组件整合开发。换SSM的话,不能说不能整合,但整合时会引入一大堆XML文件,导致很难维护。
也就是说,Spring Boot能帮助程序员更好地搭建增删改查的业务,部署运行起来比较方便,而且能更好地整合其他功能组件,所以现在很热了,与之对应的,程序员就必须掌握Spring Boot了。

接下来说说Spring Boot该怎么学?
对于不同阶段的程序员来说,Spring Boot需要掌握的程度也是不同的。
1.如果是毕业生,或者培训班刚出来的程序员,那么会用Spring Boot做增删改查项目就行了。在这个阶段,需要会用Spring Boot开发一个基本项目,整合JPA连接数据库,知道常用的注解,会用AOP(或者看得懂AOP编程方式)。在这个阶段,只要能按项目经理的要求,照着现有的模块开发增删改查的业务就行。比如给个订单模块,能照着做用户模块的增删改查业务功能。
说实话,要做到这种程度不难,这也是为什么大批培训班学生能入行程序员的原因,而且如果这些程序员再刻苦上心点的话,干的活绝不比科班出身的程序员差。
2.对于工作经验在3年左右的初级程序员来说,Spring Boot方面需要能更熟悉地开发各种业务,往往大多数初级开发做多年熟练工,熟悉了本公司的业务,要做到这点不难。此外还需要会干一些高级的活,比如引入Junit写单元测试,整合jenkinks做部署,整合ELK输出日志,出了问题能通过观察日志很快定位排查,或者通过引入Spring Security组件实现各种安全方面的功能。说实话,只要上心,能掌握这些Spring Boot高级技能不难。
3.如果Spring Boot仅限于做增删改查熟练工,可能顶了天能算熟悉业务,但只能开发基于Windows的单机版的模块。
在这个阶段,不少程序员可能就陷于职业瓶颈了。在本公司里也属于老土地了,业务流程基本上也很熟悉了,来个业务也能很快搞定,平时干活也不累。
但要往上提升,姑且不论是否想进大厂,也姑且不论是干架构师还是项目经理,在Spring Boot方面,需要和诸多分布式组件整合,搭建应对高并发的项目,或者哪怕平时不具体干这类活但得知道,至少不是仅限于理论。比如得整合Redis集群+MyCat应对高并发挑战,整合消息中间件作异步处理,整合Dubbo+zookeeper作高可用远程架构,整合Nginx做分布式部署,但这时就有问题了。因为缺乏用分布式搭建高并发项目的经验,即使你跳槽想找个实践机会,但面试时,由于分布式高并发只会说理论,往往又找不到合适的。
本人在这个阶段提升也费了不少劲。记得当年在一家外企,Spring Boot单机版技能非常熟悉,但在面试架构师的职务时,面了不下10家,但只要面试官一问分布式组件项目经验,或问项目开发一定会用到的技能,就答不上来。为什么呢?因为第一在项目中接触不到分布式组件,第二分布式组件环境比较难搭建,没有开发环境,那么学习就无从谈起了。后来还是踏踏实实找个互联网公司的资深开发职务,虽然职务上依然是开发,不是架构,但好歹项目开发时能用到分布式组件,有了实践机会,技术就突飞猛进了,也为我成长为架构师打下了基础。

这里用那么多话想说明的事情是,Java程序员如果要继续升级,须进一步学分布式这块,虽然这个升级过程很难,会卡住一部分程序员,但广大程序员朋友一定要跳过这个龙门。
4.当程序员掌握了Spring Boot整合分布式组件应对高并发挑战的相关技能后,之后的路就很广了,至少能把职业瓶颈年龄延迟到35岁。Spring Boot技能其实该学的也都学了,之后可能就是用Spring Boot+分布式组件+其他工具搭建框架管理项目了,可能还要掌握些Spring Boot + Docker+K8S的技能,但有了Spring Boot相关经验,这些也不难学了。
以当下Spring Boot的热度,只要用Java开发项目的公司至少会用Spring Boot,只是不同的公司会加不同的模块。但对Java程序员来说,总想进大厂或好公司做Spring Boot的活吧。
不过大厂(或互联网公司独角兽公司或有前景的公司)能提供Spring Boot架构师的实践机会,但增删改查程序员想要进,会遇到“缺乏实践机会“的困境,不过一旦进去了,就不愁不升级了。
本人最近出了一本Spring Boot+分布式组件的书,清华大学出版社出版,带视频教学。里面首先讲了基础知识,包括搭建Spring Boot开发环境、Spring Boot基本框架、通过JPA操作数据库技术、面向切面编程技术、基于Thymeleaf和FreeMarker的全栈开发技术、拦截器和过滤器开发技术、通过RESTful规范定义服务技术、通过Swagger组件可视化服务技术、通过logback和ELK组件输出日志技术、基于Spring Security和Shiro的安全框架技术和基于Junit的单元测试技术。
这部分的知识能帮助初学者很快掌握增删改查技能,能帮助初学者用Spring Boot找到工作从而挣到钱,但本书讲的内容没有仅限于此。
随后围绕高并发项目需求,讲述Spring Boot整合MongoDB、ELK、Redis、MyCAT、Dubbo、Zookeeper、RabbitMQ和Nginx等分布式组件的做法。考虑到不少读者是第一次接触到这些分布式组件,所以各章都会从搭建环境讲起,结合能观察到运行效果的案例,给出Spring Boot整合诸多组件的实践要点。这部分其实对大家帮助更大的是,讲述了搭建环境的步骤,环境搭好了,学习起来就事半功倍了。
这部分的内容能帮助只会增删改查的程序员掌握分布式组件的技能,这样面试的时候就不只会讲理论,而会结合语法和实践要点证明自己用过了。
最后再讲了两大案例,一个是以Spring Boot+Vue.js前后端分离项目为例,给出了基于Vue的全栈开发技术,其中前端用到了Vue、Element-UI和Axios等组件,后端用到了Redis缓存组件和MyCAT分库组件。另一个是通过Spring+Redis+RabbitMQ高并发限流和秒杀项目讲述Redis和RabbitMQ等分布式组件的用法,这两大案例可以作为初级程序员练手项目或毕业生做课程设计和毕业设计的参考。
这本书总结了本人多年来的开发经验,真实的干货分享,希望能对有心突破Java技能瓶颈的读者有所帮助。
最后,祝愿广大程序员朋友能不断突破自己的职业瓶颈,不断提升自己的技术和收入。

《Spring Boot+Vue.js+分布式组件全栈开发训练营(视频教学版)》
曹宇,副教授,从事高校教育工作17年,主要研究领域为计算机应用技术,主讲Java编程课程多年,主导开发了EPC企业专利信息协同平台、大宗商品信息管理系统等多个项目,公开发表了《基于蒙太古语义学和受控自然语言的文献信息系统的实现》《基于JSON、JavaScript、HTML5和前端存储技术的均衡运算框架研究》《基于UWB的ROS机器人室内定位系统设计》等论文数十篇。
胡书敏,大连理工大学计算机硕士,有15年Java开发经验,资深Java架构师,目前在SAP从事Java开发工作,有平安、花旗和IBM等大厂的工作经验,同时还有近8年Java技术面试官的经验。出版过《Java Web轻量级开发面试教程》《Java核心技术及面试指南》《Spring Cloud实战》等技术图书。