🐌个人主页: 🐌 叶落闲庭
💨我的专栏:💨
c语言
数据结构
javaEE
操作系统
石可破也,而不可夺坚;丹可磨也,而不可夺赤。
SpringBoot简介
- 一、 SpringBoot概述
- 1.1 起步依赖
- 1.2 辅助功能
- 1.3 SpringBoot程序启动
- 二、 SpringBoot基础配置
- 2.1 配置文件格式
- 2.1.1 自动提示功能消失解决方案
- 2.2 yaml
- 2.2.1 yaml语法规则
- 2.2.2 yaml数据读取方式
- 2.2.2.1 使用`@Value`读取单个数据,属性名引用方式:${一级属性名.二级属性名......}
- 2.2.2.2 封装全部数据到`Environment`对象
- 2.2.2.3 自定义对象封装指定数据
- 2.2.2.4 自定义对象封装指定数据警告解决方案
- 2.3 多环境启动
- 2.3.1 yml文件多环境启动方式
- 2.3.2 application.properties文件多环境启动
- 2.3.3 多环境命令行启动参数设置
- 2.3.3 多环境开发兼容问题(Maven与boot)
- 2.4配置文件分类
一、 SpringBoot概述
1.1 起步依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.14</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>springboot_quick_start</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot_quick_start</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
</project>
- 根据
spring-boot-starter-web
可以得到它对应的配置:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.7.14</version></parent><artifactId>spring-boot-starter-parent</artifactId><packaging>pom</packaging>
</project>
- 这个配置类又继承了
dependencies
: -
-
- 各种
properties
信息:
- 各种
-
<properties><activemq.version>5.16.6</activemq.version>...
</properties>
-
- 2.各种依赖管理:
<dependencies>
<dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-amqp</artifactId><version>${activemq.version}</version></dependency><dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-blueprint</artifactId><version>${activemq.version}</version></dependency>...
</dependencies>
- starter
-
- SpringBoot中常见项目名称,定义了当前项目使用的所有项目目标,已达到减少依赖配置的目的
- parent
-
- 所有SpringBoot项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的
-
- spring-boot-starter-parent(2.5.0)与spring-boot-starter-parent(2.4.6)共计57处坐标版本不同
- 实际开发
-
- 使用任意坐标时,仅书写GAV中的G和A,V由SpringBoot提供
-
- 如发生坐标错误,再指定version(要小心版本冲突)
1.2 辅助功能
- 内置服务器,根据
spring-boot-starter-web
依赖,可以内置一个tomcat服务器
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
- 内置了tomcat服务器
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><version>2.7.14</version><scope>compile</scope>
</dependency>
1.3 SpringBoot程序启动
- 启动方式
@SpringBootApplication
public class SpringbootQuickStartApplication {public static void main(String[] args) {SpringApplication.run(SpringbootQuickStartApplication.class, args);}
}
- SpringBoot在创建项目时,采用jar的打包方式
- SpringBoot的引导类是项目的入口,运行main方法就可以启动项目
- 将tomcat服务器换为jetty服务器:
- 在原有的服务器启动类下使用
exclusion
排除掉Tomcat依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><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项目
- Jetty比Tomcat更轻量级,可扩展性更强(相较于Tomcat),谷歌应用引擎(GAE)已经全面切换为Jetty
二、 SpringBoot基础配置
2.1 配置文件格式
- SpringBoot提供了多种属性配置方式(选用不同的配置文件)
- 配置文件名必须是application开头的,否则可能不生效
-
application.properties
server.port=80
-
application.yml
server:port: 81
-
application.yaml
server:port: 82
注意:
port:
后一定要加空格
- 当这三个配置文件都配置时,默认使用顺序是
application.properties
优先级最高,其次是application.yml
,最低优先级是application.yaml
,一般写项目时用的配置文件是application.yml
2.1.1 自动提示功能消失解决方案
在使用以
.yml
或.yaml
为后缀名的配置文件时,可能会出现自动提示功能消失的问题
解决步骤如下:
2.2 yaml
- YAML (YAML Ain’t Markup Language),一种数据序列化格式
- 优点:
-
- 容易阅读
-
- 容易与脚本语言交互
-
- 以数据为核心,重数据轻格式
- YAML文件扩展名
-
.yml
(主流)
-
.yaml
2.2.1 yaml语法规则
- 大小写敏感
- 属性层级关系使用多行描述,每行结尾使用冒号结束
- 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
- 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
- #表示注释
2.2.2 yaml数据读取方式
2.2.2.1 使用@Value
读取单个数据,属性名引用方式:${一级属性名.二级属性名…}
lesson: SpringBootserver:port: 80books:name:subject:- Java- 操作系统- 网络
@RestController
@RequestMapping("/books")
public class BookController {@Value("${lesson}")private String lesson;@Value("${books.subject[0]}")private String subject_0;
}
2.2.2.2 封装全部数据到Environment
对象
@RestController
@RequestMapping("/books")
public class BookController {@Autowiredprivate Environment environment;@Autowiredprivate Books books;@GetMapping("/{id}")public String getById(@PathVariable Integer id) {System.out.println(lesson);System.out.println(subject_0);System.out.println(environment.getProperty("lesson"));System.out.println(environment.getProperty("books"));System.out.println(books);return "hello,spring boot!";}
}
2.2.2.3 自定义对象封装指定数据
@Component
@ConfigurationProperties(prefix = "books")
public class Books {private String name;private String[] subject[];
}
2.2.2.4 自定义对象封装指定数据警告解决方案
在使用自定义对象封装指定数据时,可能会遇到警告信息:
- 在pom.xml文件中添加如下依赖即可:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>
2.3 多环境启动
2.3.1 yml文件多环境启动方式
# 设置启用的环境
spring:profiles:active: pro
---
# 开发
spring:profiles: dev
server:port: 80
---
# 生产
spring:profiles: pro
server:port: 81
---
# 测试
spring:profiles: test
server:port: 82
2.3.2 application.properties文件多环境启动
-
- 主启动配置文件
application.properties
-
spring.profiles.active=dev
- 环境分类配置文件
application-dev.properties
-
server.port=8080
- 环境分类配置文件
application-pro.properties
server.port=8081
- 环境分类配置文件
application-test.properties
server.port=8082
- 主启动配置文件
2.3.3 多环境命令行启动参数设置
- 带参数启动SpringBoot
java -jar springboot.jar --spring.profiles.active=test
- 可通过命令行修改参数
- 修改端口:
java -jar springboot.jar --spring.profiles.active=test --server.port=88
- 参数加载优先级顺序(从上到下优先级递增)
- 可参考官网https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config
2.3.3 多环境开发兼容问题(Maven与boot)
- Maven中设置多环境属性
<!--开发环境--><profiles><profile><id>dev</id><properties><prfile.active>dev</prfile.active></properties></profile><!--生产环境--><profile><id>pro</id><properties><prfile.active>pro</prfile.active></properties><activation><activeByDefault>true</activeByDefault></activation></profile><!--测试环境--><profile><id>test</id><properties><prfile.active>test</prfile.active></properties></profile></profiles>
- SpringBoot中引用Maven属性
# 设置启用的环境
spring:profiles:active: ${prfile.active}---
# 开发
spring:profiles: dev
server:port: 80
---
# 生产
spring:profiles: pro
server:port: 81
---
# 测试
spring:profiles: test
server:port: 82
- Maven指令执行完毕后,生成了对应的包,其中类参与编译,但是配置文件并没有编译,而是复制到包中
- 解决思路:对于源码中非java类的操作要求加载Maven对应的属性,解析
${}
占位符
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>maven-resources-plugin</artifactId><configuration><encoding>UTF-8</encoding><useDefaultDelimiters>true</useDefaultDelimiters></configuration></plugin></plugins></build>
2.4配置文件分类
- SpringBoot中4级配置文件
-
- 1级:file:config/appication.yml(最高)
-
- 2级:file:application.yml
-
- 3级:classpath:config/application.yml
-
- 4级:classpath:application.yml (最低)
- 作用:
-
- 1级与2级留做系统打包后设置通用属性
-
- 3级与4级用于系统开发阶段设置统用属性