前言
在当今的Java领域,Spring Boot是十分流行的,因为用它开发确实非常快更简单,有人甚至说可以不用学Spring,直接学Spring Boot,但是Spring Boot的底层还是Spring Framework,只不过是在Spring Framework的基础上进行了一层封装而已(以我目前的水平看是这样的),不学 Spring,直接学Spring Boot,在我看来就像是建楼不建地基,直接从第二层开始建一样。所以我希望你在看本篇之前,希望你对Spring Framework已经有一定了解了,那么怎么确认是否达到这个标准呢? 可以参看我这篇博客: 欢迎光临Spring时代(一) 上柱国IOC列传。如果这篇博客的东西你都掌握了,基本上这篇博客讲的就可以基本看懂了。
这些做的练习我都放在码云上了,有时间会在GitHub上也放一份, 地址如下:
简介
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run".如果你想创建基于Spring的单体应用,且是生产级别的,选取Spring Boot吧,它非常简单,简单到你好像不用写代码,只用运行就可以了。We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need minimal Spring configuration.老实说这句话我一直在究竟怎么翻译,我的第一个理解是我们为Spring 平台和第三方库设计了一个视图,能够开发者最快的开始开发,绝大部分Spring Boot程序需要的配置很少。第二个理解就我们重新审视了Spring 平台和第三方库之间的关系设计了Spring Boot框架,Spring Boot能够让开发者快速的开发,绝大部分Spring Boot 程序需要的配置文件都很少。反正两个理解相近都是在说能够让开发者快速上市,而且配置文件很少。有英语好的同学,可以在下方留言。
上面所说的视图就是我理解就是这个东西:
特点
- Create stand-alone Spring applications
创建单体Spring 程序
- Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
内置Tomcat、Jetty、Undertow等应用服务器(可以自己选择)
- Provide opinionated 'starter' dependencies to simplify your build configuration (提供starter依赖集供你选择让你的pom文件更小一点)
- Automatically configure Spring and 3rd party libraries whenever possible
尽可能的自动配置Spring和第三方库
- Provide production-ready features such as metrics, health checks, and externalized configuration
提供一个可随时上生产环境的特性,就像一个度量仪,用于健康监测和扩展配置。 这个应该说的是Spring Boot admin,监控应用的运行状况
- Absolutely no code generation and no requirement for XML configuration
完全没有衍生代码和xml配置文件 可能到这里你还是有些晕哈,什么是starter,什么是自动配置,没配置XMl配置文件,数据库信息我还怎么配置? 不要着急,慢慢跟着我的思路走,下面会一一讲清楚这些名词。
Spring Boot与Spring Cloud
Spring Boot似乎与微服务的概念缠绕在一起,是不是Spring Boot就是用来做微服务的呢? 写到这里,可能还会有同学会问,什么是微服务? 简单的说,微服务是一种软件架构,那什么是软件架构? 请参看我这篇文章:
如果你常看我的文章,会发现我的文章基本上是一环扣一环的,是一个有序的系统。
那Spring Cloud是什么?
Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systemsSpring Cloud 为开发人员提供了一系列工具集来解决在构建分布式系统中遇到的一些通用问题。 原来是个工具集啊,看起来跟微服务也没关系啊。不要着急,我们在Spring官网再仔细找找。
Microservice architectures are the ‘new normal’. Building small, self-contained, ready to run applications can bring great flexibility and added resilience to your code. Spring Boot’s many purpose-built features make it easy to build and run your microservices in production at scale. 微服务架构正在成为新常态,组建一个个微小的、包含容器的、运行起来简单的能够给你的系统带来高灵活性和强扩展性。 Spring Boot的许多构建特性能够让开发者在大型项目中组建和部署微服务简单起来。
And don’t forget, no microservice architecture is complete without Spring Cloud ‒ easing administration and boosting your fault-tolerance. 但是不要忘了,在Java领域,没有Spring Cloud的任何微服务架构都是不完整的,因为缺少容错能力和管理麻烦。
所以Spring Boot和Spring Cloud是可以用来组建微服务,实现微服务架构的。Spring Boot用来做开发服务,只是加快你开发Spring 应用程序的速度,不一定非得用来做微服务。Spring Cloud用来做服务治理和Spring Boot能够做到无缝集成。 到此两者的关系应该讲清楚了。
如何创建一个Spring Boot工程
版本号选讲
数字版本号参看知乎的这个问题: 软件的版本号是如何确定的?直接想看官方约定的,请去这个网址: semver.org/lang/zh-CN/这里讲的是英文大版本号,像GA之类的:
- GA
General Availability,正式发布的版本,官方开始推荐广泛使用,国外有的用GA来表示release版本。
- RELEASE
正式发布版,官方推荐使用的版本,有的用GA来表示。比如spring。
- Stable
稳定版,开源软件有的会用stable来表示正式发布的版本。比如Nginx。
- Final
最终版,也是正式发布版的一种表示方法。比如Hibernate。
- RC
Release Candidate,发行候选版本,基本不再加入新的功能,主要修复bug。是最终发布成正式版的前一个版本,将bug修改完就可以发布成正式版了。
- alpha
α是希腊字母的第一个,表示最早的版本,内部测试版,一般不向外部发布,bug会比较多,功能也不全,一般只有测试人员使用。 Beta β是希腊字母的第二个,公开测试版,比alpha版本晚些,主要会有“粉丝用户”测试使用,该版本仍然存在很多bug,但比alpha版本稳定一些。这个阶段版本还会不断增加新功能。分为Beta1、Beta2等,直到逐渐稳定下来进入RC版本。 我们介绍的是常见的,然后还有一些,如果还想了解请参看后文的参考资料中的文章。
方式一: Spring Initializr
不用配置Tomcat,直接运行我们看下效果:然后我们写个Controller试试看:代码如下:
RestController public class HelloWorld { @GetMapping(value = "/hello") public String test() { return "hello"; } } 复制代码
输入url: http://localhost:8080/hello结果: 下面会讲什么不用之前那么一堆,就能直接编写Controller。
方式二: 直接引入依赖
- 新建一个maven工程,如果你不懂maven,请参看: Maven学习笔记
- 2.3.9的Spring Boot将对应starter的pom展示移除了,如果你想复制的话,可以进入这个网址:
试了好几次,访问pom是进入GitHub,但是总是失败。Spring Boot 的starter依赖总是以spring-boot-starter开头,我们不用写版本号,因为继承了父依赖。我们直接这么写就行了:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 复制代码
然后建一个包和类:
@SpringBootApplication public class StudySpringBoot { public static void main(String[] args) { SpringApplication.run(StudySpringBoot.class, args); } } 复制代码
运行结果:同样的控制器代码:
同样的运行结果: