作为 Java 工程师,你的 Spring 用对了吗?

阅读数:3852 2019 年 2 月 11 日

话题:架构Java微服务

毋庸置疑,Spring 早已成为 Java 后端开发事实上的行业标准,无数的公司选择 Spring 作为基础的开发框架,大部分 Java 后端程序员在日常工作中也会接触到 Spring ,在使用的过程中不知道你是否遇到这些问题:

  • 在代码之外,看着一堆依赖和配置,总是有些摸不清方向;
  • 看着这么多组件,总是不知道该从何入手;
  • 看着一同入职的小伙伴把框架玩得很溜,总是不明白自己到底哪里没开窍;

从 2002 年误打误撞开始写 Java 后,就把这门语言当做自己的主要工作语言了,一路上踩过不少坑,因此深有感触,还记得前些年 Spring Boot 和 Spring Cloud 还没有出现,我们在开发一个互联网金融相关的项目,大致要求如下:

前端有 PC、HTML5 和 APP,通过接口与后端系统交互,后端再访问核心系统,所有数据存储于 MySQL 中。
整个应用部署在私有云上,应用实例要能根据业务量动态扩容或者缩容,遇到紧急情况时,系统还要能够自动或者通过后台开关手动降级…

一连串的需求如潮水般涌来,要命的是留给我们的时间还特别紧张,当时的内心还是有些小崩溃的,后来平复了一下心情,除了那些基本的功能性需求,还梳理了那些非功能性的点:

  • 需要发布 RESTful Web Services
  • 考虑到系统的吞吐量要求,需要实现读写分离,将大部分数据缓存到 Redis 中
  • 系统是集群化部署的,Web 层的系统可能需要分布式 Session
  • 系统需要有配置开关,最好开关还要实时生效
  • 系统要能实现服务的自动注册与发现,在集群中做到负载均衡
  • 遇到突发流量或者故障,系统要能熔断
  • 为了缩短实时链路,有些不必要的操作可以通过消息来传递
  • 开发、测试、预发布、生产每个环境的配置文件和配置项会有区别,需要独立配置
  • ……

长长的清单一眼望不到尽头,更要命的是产品经理和老板在提需求时基本不会和你说这些,但在出问题时,没考虑到这些点,锅都是你的,谁让你是专业人士呢。

大厂有丰富的基础设施,能帮助业务实现很多非功能性需求,但如果是小公司,技术积累不多,那就只能靠加班加点堆积代码来实现,没给自己少埋坑,比如把开关做在数据库里,每次判断都 SELECT 一下,流量一大数据库就扛不住了;配置文件一多就乱套了,测试的配置一不小心就带上线了……

直到后面出现了 Spring Boot 和 Spring Cloud,只需引入一些 Starter Dependency,简单修改一些配置文件,再通过很少量的代码就可以实现上述需求,它们可以帮助工程师更好地基于 Spring 及各种基础设施来快速搭建系统,可以说,它们的诞生又一次解放了大家的生产力

所以,Spring Boot 和 Spring Cloud 已成为 Spring 生态中不可或缺的一环。想成为一名合格的 Java 后端工程师,Spring Framework、Spring Boot、Spring Cloud 这三者必须都牢牢掌握。

很早之前,极客时间的编辑找到我,想让我开设一门关于 Spring 的课程,刚开始我是拒绝的。

在十几年前,我刚接触 Spring 时,国内基本没什么好的材料介绍它,更不要说什么像样的图书课程了,我和朋友们一起在满江红翻译了 Spring Framework 2.0 和 2.5 的文档发布在网上,希望通过完整的中文文档帮助大家更好地了解和使用 Spring。

到了 3.0 时我们就不再组织翻译了,原因是中文世界里已经有很多帮助大家学习 Spring 的东西了,无论是网上的文章还是线下的图书,大家也都已经把使用 Spring 做为工作中的常态了。既然它已如此普遍,那为什么还要再去专门做一门课程呢?

后来我调研了一下,市面上有很多书和教程,但对于很多初学者,在学习 Spring 的时候,难免会遇到这些问题:

  • 官方文档虽然全面,但面对庞杂的知识体系,很多初学者一时不知该从哪里下手;
  • 手册式的书籍内容丰富,但平铺直叙的风格也很难让人快速抓住重点;
  • 网络也有很多的文章可以参考,但要不就是知识点太分散,要不就是在围绕那几个常见的点“炒冷饭”;
  • 有的教程写得也很不错,但只是介绍了某一个框架,那我在面对一打框架的时候,该怎么把它们结合到一起呢?

除此之外,很少有人会在文章或教程里去讲述框架扩展定制等相关的东西,而我在工作中则经常需要去考虑怎么让框架更好地为业务落地去服务,我也希望能把自己的经验传递给更多的工程师。

原理和实战相辅相成是本课程的一大特色,整个学习周期你将跟随我搭建一个线上咖啡馆的实战项目,通过实战把所有零碎的知识点串联起来,通过即学即用的方式,让你把知识点掌握得更牢固,理解得更透彻。

不同于市面上大多数教程,我希望不仅带给你 Spring Framework、Spring Boot 与 Spring Cloud 的实战技巧,更让你了解这些工具背后的关键机制与实现原理,真正做到活学活用。

我是谁?

我是丁雪丰,喜欢写程序,也是《Spring Boot 实战》与《Spring 攻略》的译者,目前就职于平安壹钱包,之前也在百度和阿里工作过。期间写过业务代码,做过中间件,干过运维,也搞过系统架构,对 Spring 全家桶产品进行过各种封装与定制,也正因为这样的工作经历,我可以从不同的角度认识和深入理解这些框架。

在这门课程中,我也会把自己这些年积累的第一手经验毫无保留地分享给大家。

你能获得什么?

1. 通过经验学习,提升实战技巧

课程中会有很多关于“怎么用”的说明,比如:

  • 怎么用 JPA 快速实现一个带特定分页查询的 CRUD Repository?
  • 怎么用 Spring MVC 实现 RESTful Web Service?
  • 怎么用 Spring Boot 搭建一个具有较强可运维性的应用?
  • 怎么通过 Sleuth 实现服务追踪等等?

不仅会用,还得用的爽,那些能提升开发效率的框架、工具都在我们的课程涉猎范围之内。

在讲明白“怎么用”的同时,我也希望能帮助大家解决遇到问题时的“怎么办”,比如:

  • 明明做了 AOP 拦截,我的 Bean 却没有被增强,怎么办?
  • Web 层部署在集群中,需要解决分布式 Session 的问题,怎么办?
  • 一直在用 RestTemplate 调用 Web 服务,请求量大了需要优化,怎么办?
  • 默认的 Tomcat 配置不能满足实际需要,需要修改一些配置,怎么办?

在掌握了“怎么用”,了解了“怎么办”之后,在实际工作中就可以做到从容应对。

2. 通过原理剖析,加深理解认识

  • 为什么 Spring Boot 能做到引入一个依赖就完成一堆配置?
  • 为什么 Spring Boot 最终生成的 Jar 包可以直接运行?
  • 为什么一行代码都没改就能在 Eureka、ZooKeeper、Consul 之间灵活切换注册中心?

一旦了解了它的原理,自然在遇到问题时就能有新的思路,“怎么做”的灵光乍现也得在日常有所积累。

  • 希望对运行时的 Web 层和 DAO 层有更多的把控,要怎么做?
  • 系统有些关键业务指标要输出给监控系统,又不想自己从头搞一套接口,要做怎么做?
  • Spring Boot 用的久了,公司有个内部设施也希望能像它一样有个 Starter Dependency,要怎么做?
  • 手头负责的系统还是 Spring 3.x 的,又要引入新的东西,希望能实现 Spring Boot 那样的自动配置,要怎么做?

不仅能知其然,还要能知其所以然,融会贯通后再运用到工作中去,让 Spring 真正为你所用。

3. 通过案例实践,巩固学习效果

课程以实战为主,全程贯穿一个咖啡馆的系统—SpringBucks,包含了下单、制作、派送的步骤,随着课程的推进会不断丰满,通过 Spring Framework、Spring Boot 和 Spring Cloud 打造一个完整的系统,麻雀虽小五脏俱全,将课程涉及的大部分内容结合起来,并部署到云上。

现在订阅有什么福利?

限时优惠¥99(原价¥129),三杯咖啡的价格,戳我立即订阅

今日的订阅用户,立即邀请你进 Spring 学习小组(仅限前 500),并获得作者精心整理的 Spring 学习路径图。(获取方式:关注极客时间公众号后台回复“春天”)