SpringBoot笔记总结
目录
2.项目打成jar包后通过命令行启动时,可以通过设置临时参数来更改配置
3.Maven与SpringBoot多环境配置冲突的解决方案
一:SpringBoot简介
SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建和开发过程
具体怎么简化的,看完SpringBoot入门案例你就明白了
二:SpringBoot入门案例开发步骤
1.创建新模块,选择Spring初始化,并配置相关基础信息
2.选择SpringBoot版本(尽量选低版本)以及当前模块需要使用的依赖
(可以选择很多依赖,根据你们项目需要的技术进行选择即可,入门案例这里为了最简开发只勾选了Spring Web依赖)
3.删除工程不需要的目录
4.在pom.xml文件中的web起步依赖环境中排除tomcat起步依赖,并添加jetty起步依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--web起步依赖环境中排除tomcat起步依赖-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加jetty依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
5. 编写控制器类
@RestController
@RequestMapping("/books")
public class BookController {
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println("id=>"+id);
return "{'message':'hello,springboot'}";
}
}
6.运行自动生成的Application引导类
好啦,到这一步,SpringBoot入门案例就编写完成了
要测试的话浏览器输入下面路径即可:http://localhost:8080/books/1
三:SpringBoot与Spring框架对比
使用Spring开发SpringMVC程序需要引入SpringMVC和Servlet依赖,需要编写ServletConfig和SpringMvcConfig配置类,再需要编写控制器类
使用SpringBoot开发SpringMVC程序需要选择Spring Web依赖,不再需要编写ServletConfig和SpringMvcConfig配置类,最后编写控制器类即可
如果看完上述文字描述,你还不清楚的下面图片的对比,你会更加直观地感受到SpringBoot是如何简化Spring应用的初始搭建和开发过程的
Spring程序缺点:配置繁琐,依赖设置繁琐
SpringBoot程序优点:不用编写配置了,使用starter起步依赖大大简化了依赖的配置,还具有一些辅助功能(如内置服务器等)
四:SpringBoot程序中需要关注的点
1.pom.xml文件中的<parent></parent>标签
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
</parent>
spring-boot-starter-parent项目是所有SpringBoot项目都要继承的项目,该项目继承了spring-boot-dependencies项目,这个项目用来做统一的版本控制 ,以达到减少依赖冲突的目的
2.starter起步依赖
sping-boot-...-starter是SpringBoot常见项目名称,定义了当前项目使用所需要的所有项目依赖,
比如:spring-boot-starter-web项目中就定义了需要的依赖(springboot, json, tomcat, spring-web, spring-webmvc)
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.14</version>
<name>spring-boot-starter-web</name>
<description>Starter for building web, including RESTful, applications using Spring MVC. Uses Tomcat as the default embedded container</description>
<url>https://spring.io/projects/spring-boot</url>
<!--中间部分内容省略,重点看集成了哪些需要的依赖-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.7.14</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
<version>2.7.14</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.7.14</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.29</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.29</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
3.引导类
有@SpringBootAppliacation注解标识的就是引导类,引导类无需自己创建
SpringBoot在创建项目的时候,采用的是jar的打包方式
SpringBoot的引导类是项目的入口,运行main方法就可以启动项目
4.变更起步依赖使用Jetty服务器替代Tomcat
原因是Jetty比Tomcat更轻量级,可拓展性更强
没有更改的spring-boot-starter-web依赖如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
更改后的spring-boot-starter-web依赖如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--web起步依赖环境中排除tomcat起步依赖-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加jetty依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
五:SpringBoot配置文件
1.配置文件格式
SpringBoot常见的配置文件的形式有3种:
1.application.properties
server.port=80
2.application.yml
server:
port:81
3.application.yaml
server:
port:82
2.配置文件加载顺序
application.properties > application.yml > application.yaml
3.yaml格式
YAML(YAML Ain't Markup Language),一种数据序列化格式。
YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。Clark Evans在2001年首次发表了这种语言,另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者。当前已经有数种编程语言或脚本语言支持(或者说解析)这种语言。
YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一个标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。
YAML格式的优点:
1.容易阅读
2.容易与脚本语言交互
3.以数据为核心,重数据轻格式
YAML文件的拓展名:
1. .yml(主流)
2. .yaml
YAML语法规则:
1.大小写敏感
2.缩进表示层级关系,同层级左侧对齐,只允许使用空格
3.属性名与属性值之间使用冒号+空格作为分隔
4.#表示注释
5.yaml数组数据在属性名的下方使用减号作为数组开始符号,每行书写一个数据,减号与数据间空格分隔
Eg:
读取YAML数据的三种方式:
--1使用@Value注解直接读取入单个数据,属性名引用方式:${一级属性名.二级属性名……}
--2封装全部数据到Environment对象后读取数据
--3自定义对象封装指定数据后读取(常用)
@ConfigurationProperties(prefix="enterprise")
public class Enterprise {
private String name;
private Integer age;
private String tel;
private String[] subject;
//自行添加getter、setter、toString()等方法
}
@RestController
@RequestMapping("/books")
public class BookController{
@Autowired
private Enterprise enterprise;
}
自定义对象封装数据警告解决方案
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
4.多环境开发配置
在实际开发中,项目的开发环境(dev), 测试环境(test), 生产环境(pro)的配置信息并不一致,所以需要配置多个环境, 也需要进行快速切换不同的环境配置
1.配置多个环境
使用yml文件配置多环境 ->更推荐使用这种方式
在resourcs目录下的application.yml中编写如下内容即可配置多个环境以及快速切换多个环境
#设置启用哪个环境
spring:
profiles:
active: dev
---
#开发环境配置
spring:
config:
activate:
on-profile: dev
server:
port: 80
---
#生产环境配置
spring:
config:
activate:
on-profile: pro
server:
port: 81
---
#测试环境配置
spring:
config:
activate:
on-profile: test
server:
port: 82
---
使用porperties文件配置多环境
需要在rsources目录下新建一个目录bak来存放四个properties文件
四个properties文件分别是:
application.properties(主配置文件) application-dev.properities(分类配置文件) application-pro.properities(分类配置文件) application-test.properities(分类配置文件)
配置文件配置内容如下:
#主启动配置文件 application.properties
spring.profiles.active=pro
#生产环境分类配置文件 application-pro.properties
server.port=80
#开发环境分类配置文件 application-dev.properties
server.port=81
#测试环境分类配置文件application-test.properties
server.port=82
2.项目打成jar包后通过命令行启动时,可以通过设置临时参数来更改配置
java –jar springboot.jar --spring.profiles.active=test 更改为测试环境
java –jar springboot.jar --server.port=88 临时更改端口
java –jar springboot.jar --server.port=88 --spring.profiles.active=test
注意:参数记载有不同的优先级,详情参看官方文档(https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html )
SpringBoot允许外部的配置,以便可以在不同的环境下使用相同的应用程序代码. 有许多的外部配置源, 比如Java properties文件,YAML文件, 环境变量和命令行参数
SpringBoot有一个特殊的PropertySource顺序,是为了进行合理的值重写. 后设置的属性源可以覆盖之前的属性源中定义的值.属性源的排列顺序如下(按照优先级从低往高排列)
3.Maven与SpringBoot多环境配置冲突的解决方案
我们知道Maven中可以配置多环境,SpringBoot中也可以配置多环境,如果两者都配置了多环境,以Maven中的配置为主
Mave兼容SpringBoot的步骤(多环境配置):
-1-Maven中设置多环境属性
<profiles>
<profile>
<id>dev_env</id>
<properties>
<profile.active>dev</profile.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>pro_env</id>
<properties>
<profile.active>pro</profile.active>
</properties>
</profile>
<profile>
<id>test_env</id>
<properties>
<profile.active>test</profile.active>
</properties>
</profile>
</profiles>
-2-SpringBoot中的application.yml引用Maven属性
#设置启用的环境
spring:
profiles:
active: ${profile.active}
---
#开发
spring:
profiles: dev
server:
port: 80
---
#生产
spring:
profiles: pro
server:
port: 81
---
#测试
spring:
profiles: test
server:
port: 82
---
-3-添加插件对资源文件开启对默认占位符的解析
Maven打包指令执行完毕后,生成了对应的包,其中类参与编译,但是配置文件并没有编译,而是复制到包中,所以我们需要对资源文件开启对默认占位符的解析
<build>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>utf-8</encoding>
<useDefaultDelimiters>true</useDefaultDelimiters>
</configuration>
</plugin>
</plugins>
</build>
到这里,Maven与SpringBoot多环境兼容就完成了~
4.SpringBoot中的配置文件级别
-1-IDEA中编写的类路径下的的application.yml (优先级最低)
-2-IDEA中编写的类路径下的config包下的application.yml
-3-程序打包以后所在文件路径里的application.yml
-4- 程序打包以后所在文件路径里的config包下的application.yml (优先级最高)
1级与2级用于系统开发阶段设置通用属性
3级与4级留做系统打包后设置通用属性