SpringBoot(一)——SpringBoot框架学习路线,项目创建、三种运行方式、启动类、Web容器配置、属性注入、YAML配置、多环境切换Profile
一、SpringBoot框架入门
1、SpringBoot引言与介绍
jsp时代,因为项目工程开发问题已经代码问题,各种各样的框架应运而生,接着就是主流的SSM,但是 SSM 还是有很多重复的代码,为了再简化,慢慢的又出现了 SpringBoot 这类框架。
2、SpringBoot学习路线
3、SpringBoot 项目的创建
SpringBoot 创建有几种方法,比如在线创建跟 IDEA 创建。
a、网站在线创建
https://start.spring.io 或者 https://start.springboot.io
这两个网站的界面一样的。
右边那半部分界面是管理依赖。
选完选项以后点击左边第一个按钮就能下载项目,接着用开发工具打开,就能开始 SpringBoot 项目。
来看下创建好项目以后的项目分层:
除了 HelloController 是自己创建的,其他均是本来就有的文件。
这个 SpringBoot 项目创建初就已经包含了 Spring 和 MVC 那套,点击运行就能使用,所以可以来测试一下:
由于 SpringBoot 内部已经有了 Tomcat 服务器,所以直接点击运行就能启动。运行之后可以发现没有问题。
b、IDEA 创建 SpringBoot 项目(推荐)
https://start.springboot.io 这个网址的服务器架设在香港,比默认的网址稳定点。
https://start.aliyun.com这个也可以,但是版本比较老,博主当前时间查看的最新版本才 2.4.1,是2020年年底发布的版本,有点老了。但是选择这个阿里云加依赖会很方便:
所以推荐的网址是 https://start.springboot.io 这个网址。
接着就是这个界面,选择跟在线创建基本一样的。
c、Maven 方式创建(备用)
说白了这个 SpringBoot 还是 Maven 项目,只有按照这个框架所需要的东西一步一步创建,也是可以的。
先来看下创建以后文件里面一些依赖或者代码:
pom.xml 文件:
只要按照这两个玩意所需要的,跟着创建也能够手动创建一个 SpringBoot 项目。
4、SpringBoot 项目运行方式
a、IDEA 直接运行
IDEA直接运行很简单,右上方一个绿色箭头那个点击这个按钮就能运行 SpringBoot 项目了。
但更多地时候是希望项目通过打包的方式运行。
b、打包后 java -jar xxx.jar(主要使用)
在对应的路径下,控制台输入 mvn package,就能够打包,然后生成一个 jar 包:
打包以后,想要通过这个 jar 包启动项目,输入:
java -jar xxx(包名 ) . jar
输入这个就能够开始运行。
所以在服务器上只要有 jdk ,再导入这个 jar 包,就能够通过输入这个命令来启动项目。
在学习 maven 的时候,可以发现是没有 springboot 这个指令的,之所以这里能用这个指令是因为有了打包插件才能使用这个指令打包:
c、打包后 mvn springboot:run(不常用)
打包后,输入 mvn springboot:run 也能启动项目。
d、b 跟 c 的区别
b 方式跟 c 方式的区别:
b 方式要在 target 目录下输入命令才能启动;而 c 方式要在根目录下输入命令才能启动。
5、SpringBoot 启动类
a、认识新注解
SpringBoot 启动类也没什么,也就多了一个注解,为什么多了这个注解后启动 main 方法就能把项目跑起来呢?
如果这时创建一个 config 文件夹,把这个启动类放进这个 config 文件夹里面,这时候在访问原本能访问的接口,就不能再访问了。原因是扫描的是启动类所在的包下面的文件,跟之前 Spring 是一样的。
点进这个注解,查看源码,可以发现有几个没有见过的注解:
@SpringBootApplication:说明当前类是一个配置类,类似于 config 的效果。起作用的重点在于里面的 @SpringBootConfiguration这个注解。
所以这个启动类可以实现以前配置类的类似效果。
还有个注解:
@EnableAutoConfiguration:开启自动化配置,尝试那些需要自动化配置的,看看能否配置(包括Spring、MVC、Redis等各种各样的东西。)
对于这块有不少人有误解:这个自动化配置的注解并不是帮我们自动添加代码,而是框架会去扫描是否有某个配置所需要的依赖,如果全部都有,足就生效,如果不够,就不会生效:
@Conditional:就是前面学到过的条件注解。
可以看到少了某些依赖,标红,所以此时某些配置不会生效。
再来看下 SpringMVC 的:
这个是自动配置 MVC 的配置,可以看到都是写熟悉的类,当这些类全部满足时,就会生效。
二、Web容器配置
以前需要手动配置 tomcat 的时候,经常要处理 url 路径,但是这个 SpringBoot 项目启动以后,直接输入接口就能访问。可以发现就是少了项目的名字。
1、默认配置
默认使用 Tomcat 容器,默认端口是 8080,context-path 为空。所以直接输入接口就能访问:
2、Tomcat 的自定义配置
当然了以前那些 tomcat 的配置也是能自定义配置的:
在 application . properties 文件里面配置:
3、配置 jetty 容器
除了配置 tomcat 容器,还能配置其他容器:
因为默认是 tomcat 容器,所以需要先排除掉 tomcat 依赖,再导入其他容器依赖:
接着:
4、配置 undertow 容器
5、三个容器的区别
一般来说,tomcat 跟 jetty 没什么区别,差别不是特别大,性能上来说 jetty 稍微好点。undertow 是比较新的容器,有特别不一样的功能,就是处理异步请求的时候性能会非常好。
三、属性注入
1、原生的属性注入
创建项目的时候,项目就有个 application.properties 文件,项目会自动加载这个文件:
如果里面写上这些属性,那么在运行项目的时候就会自动加载到 Spring 容器中,接着实体类代码:
然后测试代码:
就能发现属性能够成功注入。
如果有自定义 properties 文件注入属性的需求,则这么写:
2、类型安全的属性注入
可以发现上一小节当中,无论是 properties 文件里面的属性还是注解里面的属性,都是一样的,既然这么多重复的代码,肯定有优化的方式,而且如果属性多了要一个个注入不是很麻烦吗?所以有一个注解可以解决这种麻烦的操作:
@ConfigurationProperties(prefix=“xx”):类型安全的属性注入,指定前缀要注入的对象名,就会自动去 Spring 容器中查找相对应的属性进行注入;这样就不需要一个个写属性。这个注解方便,解决了很多繁琐的操作,对应的是 Properties文件相关注解的@Value。
像上述例子中,前缀就是 book 了:
四、YAML 配置
1、YAML 和 Properties
properties 配置底层的类是 Properties,**Properties 继承自 Hashtable,而 Hashtable 是无序的。**只要是 Properties 文件读到内存中都是无序的。然而有的时候我们需要的是有序的,这里就需要 yaml 配置了。YAML 配置的底层是 LinkedHashMap,而 LinkedHashMap 的特点是有序。
yaml 配置文件,通过 snakeyaml 来解析,加入 web 依赖以后,默认情况下,snakeyaml 就已经加入了;不同于 properties 配置,@PropertySource 注解不能用来加载自定义的 yaml 配置文件。SpringBoot中默认只会加载 application.yaml 。
2、YAML的文件和格式
创建一个 yaml 的文件,后缀是 yaml 或者 yml 都可以:
先来看两个实体类:
yaml 文件中属性的格式:
五、多环境切换 Profile
1、多环境切换 Profile
在以前的 Spring 框架中实现过多环境下切换,在 SpringBoot 中,这个实现的更为简单。
配置文件格式:application-xxx.properties
2、properties 文件实现
通过 application.properties 这个文件就可以实现加载哪个配置文件。
3、java 代码实现
这样也能实现对应的效果。