简介
Spring Boot 是一个开源的 Java 框架,用于简化 Spring 应用程序的开发过程。它基于 Spring 框架,旨在通过自动配置、简化的项目结构以及内嵌的服务器支持,帮助开发者快速构建和部署应用程序。
特性
-
自动配置:根据项目的依赖关系自动配置 Spring 框架
-
内嵌服务器:内嵌Tomcat或Jetty、 Undertow 等Servlet容器;
-
开箱即用:SpringBoot提供了许多默认的配置和模版,使开发者可以快速上手
-
提供可选的starter,简化应用整合: 场景启动器(starter):web、json、邮件、oss(对象存储)、异步、定时任务、缓存…
-
开发工具支持:支持自动重启、热部署
项目创建
创建方式一
通过脚手架进行创建:Spring Boot CLI 命令行界面;使用idea创建选择Spring boot或者Spring Initializr
创建方式二
通过maven进行创建,创建的项目需要直接继承spring-boot-starter-parent
<?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
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.7.18</version>
</parent>
<groupId>org.example</groupId>
<artifactId>boot-02</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
创建方式三(推荐)
父子工程
- 在父工程中添加
spring-boot-dependencies
依赖管理标签
<?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
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>boot-03</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>model-01</module>
</modules>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<spring-boot.version>2.7.18</spring-boot.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
- 在子工程中直接进行依赖引入
<?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
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>boot-03</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>model-01</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
自动装配
流程
-
启动应用程序,使用@SpringBootApplication注解标注启动类,启动SpringBoot应用程序;
-
启动自动装配,@SpringBootApplication包含@EnableAutoConfiguration注解(自动装配)
-
加载spring.factories文件: AutoConfigurationImportSelector 类通过SpringFactoriesLoader加载META-INF下面的spring.factories文件
-
获取候选配置类,通过该文件获取到所有的候选配置类;
-
条件化加载配置类: SpringBoot 根据@Conditional 注解条件,有条件的加载配置类;
-
注解bean:将加载的配置类注入到spring容器中,并创建相对应的bean。
配置文件
properties 配置文件
Springboot应用启动的时候会默认去加载application.properties文件
属性注入
-
application.properties
user.username=ww user.password=123456 user.email=ww@example.com user.phone=1235648
-
User. java
@Data @Component public class User { @Value("${user.username}") private String username; @Value("${user.password}") private String password; @Value("${user.email}") private String email; @Value("${user.phone}") private String phone; }
类型安全的配置属性
@ConfigurationProperties
注入的数据不再是简单数据类型的数据。
-
在使用之前需要导入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <version>3.0.10</version> </dependency>
-
User. java
@Data @Component @ConfigurationProperties(prefix = "user") public class User { private String username; private String password; private String email; private String phone; }
yaml 配置文件
properties文件可读性差,没有办法直观的看到属性与属性之间的关系
特点
-
易于阅读:YAML采用简洁的键值对形式表示数据,使得数据更加易于阅读和理解。同时,YAML
支持使用缩进表示层级关系,使得数据结构更加清晰。 -
易于编写:YAML的语法相对简单,开发人员可以快速编写和修改配置文件,而无需担心格式错误
或语法错误。这大大提高了开发效率和配置管理的便捷性。 -
支持多种数据类型:YAML可以表示多种数据结构,如普通的值(数字、字符串、布尔值、日期
等)、数组、列表、集合等。这使得YAML能够满足各种复杂的配置需求。 -
可扩展性:YAML允许用户自定义节点,根据实际需求添加新的配置项。这使得YAML能够适应不
断变化的应用需求。
语法
-
大小写敏感。
-
使用缩进表示层级关系,通常使用两个空格(不能使用Tab键)。
-
键值对格式: key: value 。
-
注释使用 # ,后面的内容将被忽略。
user:
username: lisi
password: 123456
email: lisi@example.com
phone: 13800138000
配置文件加载优先级
优先级随着目录依次递减,最高的优先级使用命令行启动项目。优先级越高的,重复的内容会覆盖。
-
命令行启动项目
java -jar xxx.jar -server.port=9000
-
项目根目录的config目录配置文件
项目名字/config/yml
-
项目根目录配置文件
项目名字/yml
-
classpath下的config配置文件
src/main/resources/config/yml # 80
-
classpath下的配置文件
src/main/resources/yml #8081
修改Banner
在SpringBoot项目启动时,会打印Spring图案,我们可以对其进行修改
-
在src/main/resources下新建一个banner.txt文档
-
通过 http://patorjk.com/software/taag 网站生成需要的字符,将字符拷贝到banner.txt文档中
重启后效果:
日志
简介
-
Spring使用
commons-logging
作为内部日志,但底层日志实现是对外开放的,可以使用其他日志框架 -
核心场景引入了日志的所用功能
spring-boot-starter-logging
-
默认整合的日志是
Logback + slf4j
-
日志是利用监听器机制配置
-
日志所有的配置都可以通过修改配置文件实现。以logging开始的所有配置
自定义配置logback
logging:
# 设置日志级别,默认为:info
level:
root: info
# 设置日志输出格式:默认为%d{yyyy-MM-dd HH:mm:ss} [%-5level]
pattern:
file:
# 设置日志生成的文件:日志生成的文件一般以.log为后缀
file:
name:
日志级别
由低到高:ALL TRACE DEBUG INFO WARN ERROR FATAL OFF
只会打印指定级别及以上级别的日志
-
ALL:打印所有日志
-
TRACE:追踪框架详细流程日志,一般不使用
-
DEBUG:开发调试细节日志
-
INFO:关键信息日志
-
WARN:警告但不是错误的信息日志,比如:版本过时
-
ERROR:业务错误日志,比如出现各种异常
-
FATAL:致命错误日志,比如jvm系统崩溃
-
OFF:关闭所有日志记录
日志分组
SpringBoot 预定义的两个组
name | Loggers |
---|---|
web | org.springframework.core.codec, org.springframework.http, org.springframework.web, org.springframework.boot.actuate.endpoint.web, org.springframework.boot.web.servlet.ServletContextInitializerBeans |
sql | org.springframework.jdbc.core, org.hibernate.SQL, org.jooq.tools.LoggerListener |
日志输出
logging.file.name | logging.file.path | 示例 | 效果 |
---|---|---|---|
未指定 | 未指定 | 仅控制台输出 | |
指定 | 未指定 | my.log | 写入指定文件。可以加路径 |
未指定 | 指定 | /var/log | 写入指定目录,文件名为spring.log |
指定 | 指定 | 以logging.file.name为准 |
切换日志组合
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
切换应用服务器
从 tomcat 切换到 jetty,默认spring-boot-starter-web
使用的是 tomcat 启动器,可以排除掉以后添加 jetty 启动器直接使用。
<dependency>
<groupId>org.springframework.boot</groupId>
<!--web项目启动器-->
<artifactId>spring-boot-starter-web</artifactId>
<!--移除tomcat的启动器-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--移除tomcat以后添加jetty-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
来源链接:https://www.cnblogs.com/codyxz/p/18640304
没有回复内容