苦于知乎没有后台文章管理页面,只能把相关文章手动做成索引。
i.9ish:「Java」 - SpringBoot & 概述
i.9ish:「Java」 - SpringBoot & 2.1.x版本
i.9ish:「Java」 - SpringBoot & 基本web开发
i.9ish:「Java」 - SpringBoot & web开发
i.9ish:「Java」 - SpringBoot & 接入AOP
i.9ish:「Java」 - SpringBoot & 接入Thymeleaf
i.9ish:「Java」 - SpringBoot & web文件上传
i.9ish:「Java」 - SpringBoot & RestAPI
i.9ish:「Java」 - SpringBoot & Swagger
i.9ish:「Java」 - SpringBoot & WebSocket
i.9ish:「Java」 - SpringBoot & FastDFS
i.9ish:「Java」 - SpringBoot & JPA
i.9ish:「Java」 - SpringBoot & 自动生成Repository类
i.9ish:「Java」 - SpringBoot & JPA多数据源
i.9ish:「Java」 - SpringBoot & MyBatis xml版
i.9ish:「Java」 - SpringBoot & MyBatis注解版
i.9ish:「Java」 - SpringBoot & Druid
i.9ish:「Java」 - SpringBoot & JDBC Template
i.9ish:「Java」 - SpringBoot & Redis
i.9ish:「Java」 - SpringBoot & Redis应用(Cache & Session)
i.9ish:「Java」 - SpringBoot & MongoDB
i.9ish:「Java」 - SpringBoot & ActiveMQ
i.9ish:「Java」 - SpringBoot & 定时任务
i.9ish:「Java」 - SpringBoot & 邮件发送
i.9ish:「Java」 - SpringBoot & ElasticSearch安装
i.9ish:「Java」 - SpringBoot & ElasticSearch
i.9ish:「Java」 - SpringBoot & 统一异常处理
i.9ish:「Java」 - SpringBoot & 使用外部Tomcat
i.9ish:「Java」 - SpringBoot & Actuator
i.9ish:「Java」 - SpringBoot & Admin
i.9ish:「Java」 - SpringBoot & 测试 & 运维
i.9ish:「Java」 - SpringBoot & 某乎爬虫
EOF
2019下半年商家后台的重构,技术选型Spring Boot,因为是大项目,所以可能全员都要参与。趁着版本空歇期,也系统的把Spring Boot梳理学习一下,起码对未来的工作知己知彼。Java栈的微服务应该也绕不开Spring Cloud,这里也提前做做工作。
一、Spring Boot介绍
A、Spring历史
2000年左右还是EJB的天下,但是Rod Johnson认为企业开发应该更简单;于是在2002年编写了一本书《Expert One-to-One J2EE Design and Development》,阐述了自己的思想,提出了一个基于普通Java类和依赖注入的更简单的解决方案。为了构建应用程序,Johnson编写了超过30000行的基础结构代码,项目中的根包命名为com.interface21,所以最初称这套开源框架为interface21,也即形成了Spring框架的基础。之后Spring平均两三年就会发布一个新版本,直到2018年秋推出Spring 5.0,Spring也从一个小小的开源软件发展为Java界第一框架,覆盖的内容也越来越广泛。
- 2004年03月,1.0版发布。
- 2006年10月,2.0版发布。
- 2007年11月,更名为SpringSource,同时发布了Spring 2.5。
- 2009年12月,Spring3.0发布。
- 2013年12月,Pivotal宣布发布Spring框架4.0。
- 2017年09月,Spring5.0发布。
Spring在不断发展的过程中也出现了一些问题,随着Spring边界不断扩张,需要的配置文件越来越多,使用起来也越复杂,项目中也经常因为配置文件配置错误产生很多问题。慢慢Spring变成了一个大而全的框架,背离它简洁开发的理念。Spring开发团队也意识到了这些问题,这时微服务的概念也慢慢兴起,Spring团队基于Spring开发了一个全新的框架Spring Boot
B、约定优于配置
Spring Boot是由Pivotal团队开发的全新框架,核心设计思想是「约定优于配置」(Convention Over Configuration),设计目的是用来简化Spring应用的初始搭建以及开发过程。Spring Boot框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置,采用Spring Boot可以大大的简化开发模式,所有常用框架,都有对应的组件支持。
开发人员仅需规定应用中不符约定的部分,例如,如果模型中有个名为User的类,那么数据库中对应的表就会默认命名为user。只有在偏离这一约定时,例如将该表命名为user_info,才需写有关这个名字的配置。Spring Boot JPA就是约定优于配置最佳实现之一,不需要关注表结构,约定类名即是表名,属性名即是表的字段,String对应varchar,long对应bigint,只有需要一些特殊要求的属性需要单独进行配置,按照这个约定可以将以前的工作大大简化。
Spring Boot来自于Spring大家族,因此Spring所有具备的功能它都有,而且更容易使用;Spring Boot以约定大于配置的核心思想,默认进行了很多配置,多数Spring Boot应用只需要很少的Spring配置。Spring Boot开发了很多的应用集成包,支持绝大多数开源软件,可以以很低的成本去集成其他主流开源软件。
C、Spring Boot Starter
Spring Boot体系将约定优于配置的思想展现得淋漓尽致,小到配置文件、中间件的默认配置,大到内置容器、生态中的各种Starters无不遵循此设计规则。Spring Boot鼓励各软件组织方创建自己的Starter,创建Starter的核心组件之一就是autoconfigure模块,也是Starter的核心功能,在启动的时候进行自动装配,属性默认化配置。
Spring Boot由众多Starter组成,随着版本的推移Starter家族成员也与日俱增。在传统Maven项目中通常将一些层、组件拆分为模块来管理,以便相互依赖复用,在Spring Boot项目中则可以创建自定义Spring Boot Starter来达成该目的。
Spring Boot拥有强大融合社区开源软件的能力,在没有使用Spring Boot之前,需要按照每个开源软件的特性,将对应的组件包集成到开发项目中,因为每个组件的设计理念和开发团队都不一致,因此会有很多不同的调用风格出现在项目中。
Spring Boot整合了主流的开源软件形成了一系列的Starter,在集成的时候做了大量的优化,使得开发者在集成的时候往往只需要很少的配置和代码就可以完成,可以说各种Starter也是Spring Boot最大的优势之一。
通过https://github.com/spring-projects/spring-boot/tree/master/spring-boot-project/spring-boot-starters,可以查看集成列表。
D、Spring Boot特性
- 通过引导页面可以快速构建项目 - https://start.spring.io/
- 方便对外输出各种形式的服务,如:web、REST API、websocket、Tasks、Streaming
- 强大的开发包依赖、自动管理依赖 - spring-boot-starter
- 支持热启动 - spring-boot-devtools
- 支持关系数据库和非关系数据库
- 支持运行期内嵌容器,如:Tomcat、Jetty,java -jar demo.jar
- 自带应用监控 - spring-boot-starter-actuator
E、Spring Boot热度
Spring Boot本身发展特别快,从2014年4月发布Spring Boot 1.0之后,版本更新非常频繁,现在Spring Boot最新稳定版本为2.1.4,2.0版本也进入了第5个里程碑。Spring Boot一经推出就迅速的成为一门热门的技术。
从Google探索可知,自2015年6月开始,Spring Boot的搜索指数呈稳定大幅增长的趋势,说明全球开发者对Spring Boot的关注度越来越高。
此图截取于Spring Boot首页,可以看出Spring在官网重点推荐了三个项目,Spring Boot排名第一,可见官方的重视程度。
F、Spring Boot与微服务架构
Spring最初核心的两大核心功能Spring IoC和Spring AOP成就了Spring,Spring在这两大核心功能上不断的发展,才有了Spring事务、Spring MVC等一系列伟大的产品,最终成就了Spring帝国,到了后期Spring几乎可以解决企业开发中的所有问题。
微服务架构是在互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下诞生的产物。互联网时代的产品通常有两类特点:需求变化快和用户群体庞大。在这种情况下,需要构建灵活、易扩展的系统,快速应对需求的变化;在用户增加的同时保证系统的可伸缩性、高可用性。
如果还按照传统开发模式,开发一个大而全的系统已经很难满足市场对技术的需求,这时候分而治之的思想被提了出来,于是从单独架构发展到分布式架构,又从分布式架构发展到SOA架构,服务不断的被拆分和分解,粒度也越来越小,直到微服务架构的诞生。
大约2009年开始,Netflix完全重新定义了它的应用程序开发和操作模型,拉开了微服务探索的第一步,直到2014年3月Martin Fowler写的一篇文章Microservices以更加通俗易懂的形式为定义了微服务架构。Martin Fowler在文中阐述了对微服务架构的设想,认为微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。
Spring Boot诞生时,正处于微服务概念在慢慢酝酿中,Spring Boot的研发融合了微服务架构的理念,实现了在Java领域内微服务架构落地的技术支撑。Spring Boot在开发、测试、部署、运维等方面都做了大量的优化,使用Spring Boot开发项目,可以快速响应需求、独立完成开发部署上线。
Spring Cloud是一系列框架的有序集合,它利用Spring Boot的开发便利性巧妙的简化了分布式系统基础设施的开发。服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
Spring Cloud是为了解决微服务架构中服务治理而提供的具备一系列功能的开发框架,并且Spring Cloud是完全基于Spring Boot而开发,Spring Cloud利用Spring Boot特性整合了开源行业中优秀的组件,整体对外提供了一套在微服务架构中服务治理的解决方案。
二、学习目标
先通过常用集成熟悉Spring Boot开发模式,再把之前用Spring Framework写的小工程,用SpringBoot+JPA重构,在工程中应用。
1、https://github.com/isisiwish/spring-boot-study
2、https://github.com/isisiwish/book-mall
参考:
https://spring.io/guides
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
https://github.com/ityouknow/spring-boot-examples
http://springboot.fun/
https://github.com/cloudfavorites
http://www.ityouknow.com/