Spring Boot是目前Spring技术体系中炙手可热的框架之一,既可用于构建业务复杂的企业应用系统,也可以开发高性能和高吞吐量的互联网应用。Spring Boot框架降低了Spring技术体系的使用门槛,简化了Spring应用的搭建和开发过程,提供了流行的第三方开源技术的自动集成。
本书系统介绍了Spring Boot 2的主要技术,侧重于两个方面,一方面是极速开发一个Web应用系统,详细介绍Spring Boot框架、Spring MVC、视图技术、数据库访问技术,并且介绍多环境部署、自动装配、单元测试等高级特性;另一方面,当系统模块增加,性能和吞吐量要求增加时,如何平滑地用Spring Boot实现分布式架构,也会在本书后半部分介绍,包括使用Spring实现RESTful架构,在Spring Boot框架下使用Redis、MongoDB、ZooKeeper、Elasticsearch等流行技术,使用Spring Session实现系统水平扩展,使用Spring Cache提高系统性能。
内容丰富,涵盖Spring Boot 2主流技术
作者有近20年的IT行业从业背景,资历深厚
李家智,出生在贵州,毕业于成都西南民族大学。现在就职于东方金科公司,担任架构师,负责公司技术产品研发。
从事软件开发近20年,致力于Java和Java EE系统的架构和实现,对一切技术充满好奇,以知行合一要求自己。除了本书,也是国内流行开源Beetl模板语言和Dao工具BeetlSQL的作者。
前言
Java的各种开发框架发展了很多年,影响了一代又一代的程序员,现在无论是程序员,还是架构师,使用这些开发框架都面临着两方面的挑战。
? 一方面是要快速开发出系统,这就要求使用的开发框架尽量简单,无论是新手还是老手都能快速上手,快速掌握页面渲染、数据库访问等常用技术。也要求开发框架能尽量多地集成第三方工具,以便信手拈来。最后,还希望在开发调试过程中,方便代码更改后能快速重启。
? 另外一方面,当系统模块增加,用户使用量增加时,面对这样的挑战,系统拆分成为新的架构,程序员和架构师当然不希望换掉已有的开发框架,希望能由小而美的系统过渡到大而强的分布式系统。
环顾当前Java开源世界中的流行技术框架,能同时胜任这项工作的微乎其微,Play和ActFramework 都是不错的选择,国内的Nutz和JFinal的口碑也不错。但能同时满足快速开发和分布式系统架构的框架,还是群众基础最好、功能最全、基于Spring技术的Spring Boot框架。
内容介绍
本书系统介绍了Spring Boot 2.0的主要技术,侧重于两个方面,一方面是极速开发一个Web应用系统(第1~6章,包含Spring介绍、MVC、视图技术、数据库访问技术),随后介绍了Spring Boot的高级特性(第7~9章),包括多环境部署、自动装配、单元测试等技术。另外一方面,当系统模块增加,性能和吞吐量要求增加时,如何平滑地用Spring Boot来实现分布式架构,会在本书的第10~17章介绍。
阅读本书的读者,可以是Java新手,从未使用过任何Spring技术。也可以是用过Spring,但想进一步了解Spring Boot的开发者。如果你已经使用过Spring Boot,那么本书也非常适合你全面深入了解Spring Boot。
希望读者阅读完本书后,既能轻松快速构建Web应用系统,也能掌握分布式系统架构的实现。
上半部分介绍Spring Boot的基础技术。
第1章:介绍Java EE,然后指出其缺点,引入了流行的Spring,同时也说明Spring经过这么多年发展后暴露的一些缺点,从而引出Spring Boot,并以两个简要例子作为说明。
第2章:对Spring Boot应用的开发环境做了说明,包括Java开发环境的安装和配置,Maven的安装和配置,设置国内仓库镜像,还有常用的Maven命令。本章最后介绍Spring历史以及现有开发团队,并介绍Spring框架的AOP和IoC两个核心技术
第3章:介绍MVC技术,前半部分重点介绍URL映射到Controller,以及映射到Controller 方法的参数、参数类型转化、参数验证。后半部分简单介绍MVC中的视图技术Freemaker、Beetl,以及Jackson序列化技术。Beetl和Jackson将在第4章详细介绍。
第4章:介绍笔者的开源技术Beetl后端模板引擎,作为国内流行的模板引擎之一,具有简单易学、功能/性能强大、支持MVC分离开发等特点。另外一部分详细介绍Jackson的JSON序列化技术。Jackson不仅作为Spring MVC中的JSON默认工具,也是Spring Boot分布式技术中常采用的JSON序列化技术。
第5章:介绍以SQL为中心的数据库访问工具BeetlSQL,这是笔者的另外一款流行Dao工具,SQL在markdown文件中管理,内置增删改查、轻量级ORM功能、代码生成、主从支持、跨多种数据库等特点,适合那些更喜欢以SQL方式访问数据库的开发者。
第6章:介绍以面向对象为中心的数据库访问工具Spring Data JPA。本章由易到难,先从Spring Data提供的功能入手,介绍如何完成数据库简单的增删改查功能,然后引入JPA来解决应用中不可避免的复杂SQL查询。
第7章:介绍Spring Boot高级特性,如常用的Spring Boot的配置、日志配置、应用配置的读取、Spring Boot自动装配技术和Spring Boot Starter实现。
第8章:介绍如何部署Spring Boot应用,包括可执行jar,以及通过war部署到应用服务器上。应用经常面对多个环境,如开发、测试,还有准线上、线上,以及多个Demo环境,Spring Boot提供Profile来实现多环境部署。
第9章:介绍单元测试概念,以及Spring Boot下的单元测试支持,包括MVC单元测试、Mock测试,以及面向数据库应用的测试方案。
下半部分介绍与Spring Boot相关的分布式技术。
第10章:介绍RESTful风格的架构,然后介绍Spring Boot如何集成以提供REST服务,使用RestTemplate调用REST服务。本章最后也重点介绍了Swagger 3.0技术,以方便REST的接口的交流、开发和测试。
第11章:介绍MongoDB的安装和使用,然后介绍Spring Boot如何集成MongoDB,同时还介绍了如何用MongoTemplate访问MongoDB。
第12章:介绍Redis服务器的安装和使用,Redis常用的数据结构和操作命令。然后介绍Spring Boot如何集成Redis,如何使用RedisTemplate来操作Redis。本章后半部分深入介绍了RedisTemplate提供的序列化机制。
第13章:介绍Elasticsearch的安装和使用,Elasticsearch既具有全文搜索功能,也能像MongoDB那样,具备NoSQL的功能。本章介绍通过REST和Spring Data两种方式访问Elasticsearch。
第14章:介绍Spring Boot Cache,并重点介绍Redis作为分布式缓存的实现。在此基础上,改进了Redis分布式缓存,通过较少的代码实现了一个具备一二级缓存的技术方案。
第15章:Spring Boot应用水平扩展,需实现无会话状态技术,Spring Session提供了分布式会话管理,本章介绍了Nginx作为反向代理的内容,以及Spring Session的Redis实现及其源码分析。
第16章:基于第15章Spring Boot应用水平扩展技术必然带来分布式协调要求,ZooKeeper是一个广泛使用的分布式协调器。本章介绍ZooKeeper的安装和使用,对领导选取、分布式锁和服务注册三个常用功能做了重点描述,并在Spring Boot 应用中采用Curator来完成这三个功能。
第17章:Spring Boot提供了内置监控功能,使得用户通过HTTP请求就能知晓服务器的健康状态,如数据源是否可用、NoSQL服务是否可用、最近的HTTP访问的内容等监控信息。本章讲述了线程栈、内存、在线日志、HTTP访问、RequestMapping等常用监控功能。其中还讲述通过dump线程栈和内存来解决Spring Boot应用中的一些性能故障。
如何阅读本书
笔者作为一个从事Java开发17年的程序员,这里给新手一些诚恳的建议,用于帮助新手掌握Spring Boot 2.0。
建议按照本书每章的例子先模仿一遍,不要急于按照自己的项目要求去改,否则很容易知识掌握不牢固、不全面。如果遇到自己暂时无法理解的知识,也建议优先记住这些知识点。
理解完书中的知识,能运行书中提供的例子(推荐手写,或者从官网下载例子)后,可以尝试主动制造一些错误。看看Spring Boot会给你什么样的错误提示,以1.4.5节例子为例,如果去掉@RequestMapping注解,或者如果写成value="/usercredit/{id123}" 会怎么样,甚至将getCreditLevel改成getCreditLevelTest会有什么后果(这个改动没有任何影响)。通过主动制造错误,观察Spring Boot应用的错误信息来深入学习Spring Boot。实际上,不仅仅是学习Spring Boot,这也是学习其他框架,甚至是编程语言或者其他任何编程技术的一种窍门。
本书每章都会提及Spring Boot框架的一些接口或者关键类,不了解这些类的实现细节,你仍然可以运用Spring Boot,如果想深入掌握Spring Boot,建议阅读这些类的源代码以了解这些类的职责以及如何实现职责。可以通过IDE的快捷键打开这些类,以Eclipse 为例,用快捷键Ctrl+T打开这些类去阅读Spring源码,还可以在这些类的方法中打上断点,在运行本书例子的时候,查看在断点处发生了什么来帮助你理解Spring Boot。比如在第14章中使用Redis实现分布式缓存的时候,提到了RedisCacheManager,你可以阅读这个类的源码,并在关键的getCache方法上打上断点,观察如何实现Redis缓存。
如果对于这些类还是无法理解,则可以通过搜索引擎搜索这些类,总有些博客和技术文章在讨论这些类的职责和实现方式。
谨慎对待互联网搜索结果,这是因为Spring Boot 2.0技术本身较为新,发展也较快,通过互联网搜索结果需要关注一下文章的发布日期、文章适用的版本,如果你在使用Spring Boot 2.0中遇到任何问题,也欢迎到社区进行交流,社区地址是ibeetl.com。
最后,请购买正版书籍,鼓励作者和出版社出版更好的技术书籍。
致谢
首先感谢我的妻子苗珺对我写书的大力支持,没有她的支持,我是不可能完成一本书的写作的。还有我的儿子,知道我正在做一件很重要的事情的时候就不再让我陪他聊天。
还要感谢电子工业出版社的编辑同志,给予我绝对的信任和支持,并对本书的出版做了非常多的指导,感谢你们付出的辛勤汗水。
最后要感谢的是公司和集团领导对我写书的大力支持,特别是在我需要帮助的时候委派左丽娜同事完成部分章节的编写,没有公司领导的支持,对于中国程序员来说,写一本书几乎是不可能完成的任务。
本书是我写的第一本书,由于Spring和Spring Boot技术体系博大精深,而我技术有限,写作过程中精力也有限,难免有纰漏,敬请读者指正。
东方邦信金融科技有限公司 李家智(闲大赋)
下载源码发现;访问http://127.0.0.1:8080/sayhello.html?name=a 时
控制台应该输出:
agrs:[]
return:hello world
个人理解:sayhello方法未带参数,输出上述结果合理;around织入的方法获取不到调用方法的参数;
改为:访问http://127.0.0.1:8080/say.html?name=a
控制台应该输出:
agrs:[a]
return:hello world a
本书附带源码错误;
将pom.xm改成pom.xml
@COntroller写错了,应该是@Controller
Controller注解应该是@Controller
return “/admin/userInfo.btl”;