一、 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:
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: SpringBoot server: port: 80 books: 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 { @Autowired private Environment environment; @Autowired private 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级用于系统开发阶段设置统用属性