1.创建一个Spring Boot工程
2.导入Spring Boot 依赖
<?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>
//继承一个父类
//该父项目还依赖另一个父项目dependencies,该项目定义里大部分jar包依赖版本,所以导入依赖默认可以不写版本号(部分除外)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
WEB模块启动器:帮助导入所有WEB可以正常运行的Jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
//maven-plugin插件,可以直接将项目打为jar包:右侧maven插件直接点击packge打包,包存在target。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3.Spring Boot主程序
- 创建一个主程序类,添加主程序标注注解 @SpringBootApplication
- 内置Tomcat可直接启动项目
@org.springframework.boot.autoconfigure.SpringBootApplication
public class SpringBootApplication {
public static void main(String[] args) {
//Spring 应用启动
SpringApplication.run(SpringBootApplication.class);
}
}
4.启动器
- Pom文件中,Spring-boot-starter:Spring-boo场景启动器:帮我们导入各模块所需要的的jar包,例如:spring-boot-starter-web。需要用什么功能就导入相关场景的starter
5.@SpringBootApplication内置注解解释
@SpringBootConfiguration:
1. 作用:标注Spring Boot的配置类 其他写法@Configuration
2. 配置类相当于 -- 配置文件
@EnableAutoConfiguration:
作用:开启自动配置功能
5.2.1 @AutoConfigurationPackage(自动配置包) @Import({Registrar.class}):给容器中导入一个组件Registrar.class,由该组件将主配置类所在包下所有组件扫描到Spring容器
5.2.2 @Import({AutoConfigurationImportSelector.class}):给容器中导入AutoConfigurationImportSelector.class组件(组件选择器),由该组件给容器中导入很多自动配置类(组件)并配置好,例如:AOP,ES等
**注:org.springframework.boot:spring-boot-autoconfigure ---- J2EE的整体自动配置都在该jar包
6.配置文件
YAML基本语法
1.k:空格V
2.集合,数组,对象写法自行百度
配置文件中配置中文
解决配置文件中文乱码问题
配置文件相关注解
1.读取配置文件注解(默认读取全局配置文件)
@Component
//@ConfigurationProperties获取配置文件值方式 需要配合@Component将该类标注为组件
@ConfigurationProperties(prefix = "person")
//数据校验,给成员变量上添加注解表示校验格式,具体注解自行百度
@Validated
public class person {
//@Value获取配置文件值方式
@Value("${xxx}")
private String name;
//SpEL
@Value("{11*33}")
private String password;
}
两者区别
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 单个指定 |
松散绑定 | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装(对象,集合等) | 支持 | 不支持 |
- 松散绑定:配置文件中的key 和 成员变量名称可以大致相同,不用完全一样
- SpEL:Spring 表达式
2.指定配置文件注解
//注:只能用于properties配置文件
@PropertySource(value = "classpath:配置文件在resource文件夹下的路径")
3.读取外部配置文件
//作用在Spring Boot主程序注解上
//不推荐使用
@ImportResource(locations = {"classpath:配置文件在resource文件夹下的路径"}):
4. Spring Boot推荐给容器中添加组件的方式: 配置类
//标记当前类为配置类 == 配置文件
@Configuration
public class MyAppConfig {
//将该方法的返回值作为组件添加到容器中,容器中这个组件默认id(名称)是该方法名
@Bean
public HelloService helloService(){
System.out.println("配置类给容器中添加组件了、、、");
return new HelloService();
}
}
配置文件占位符
1.随机数
person.password = ${random.int}
//其他随机值用法自行百度 random
7.Profile多环境配置文件
- 主要用于设置多环境下不同的配置文件
7.1 多Profile文件方式
文件名:application-dev.properties / application-prd.properties 等
//*注:默认使用主配置文件的配置
激活其他环境配置文件: 在主配置文件中配置:spring.profiles.active = dev/prd
7.2 yml多文档快方式
#文档块语法:--- 来分割成文档块,每一个文档块相当于一个配置文件
#文档配置:
spring:
profiles:dev/prd/xxx
#激活文档配置:
Spring:
profiles:
active:dev/prd/xxx
7.3 其他激活profile方式
命令:--spring.profiles.active=dev/prd/xxx
- 两种激活profile方式
8.配置文件加载位置
//Spring Boot项目启动时会扫描application.properties或application.yml文件
//优先级:由高到低,高优先级配置会覆盖低优先级的配置(值覆盖重复的配置),其他配置互补
-1:file/config/xxxx:项目包下创建config包中的配置文件
-2:file/xxxx:项目包下的配置文件
-3:classpath/config/xxx:模块Resource文件夹下config包中的配置文件
-4:classpath/xxx:模块Resource文件夹下配置文件
//注:项目打包后运行也可以通过 项目包 -jar spring.config.location=配置文件路径 来加载新的配置文件(最高优先级)
9.自动配置原理
9.1 自动配置流程:
-
@SpringBootApplication(主程序注解) --> @EnableAutoConfiguration(开启自动配置) --> @Import({EnableAutoConfigurationImportSelector.class})(加载Selector组件,通过Selector组件加载SpringBoot提供的大量自动配置类)
9.2 自动配置类举例
- HttpEncodingAutoConfiguration:Http编码自动配置 ,帮助我们解决乱码问题
//表示这是一个配置类,并将该类作为组件加入容器
@Configuration
//启动指定类的ConfigurationProperties功能
@EnableConfigurationProperties({HttpEncodingProperties.class})
//Conditional:Spring底层注解:根据条件来进行判断,条件成立配置类才会生效
//判断当前项目是否是 WEB 应用
@ConditionalOnWebApplication
//判断当前项目 是否存在 CharacterEncodingFilter类:乱码解决过滤器
@ConditionalOnClass({CharacterEncodingFilter.class})
//判断配置文件中是否存在 spring.http.encoding.enabled配置 matchIfMissing = true 无论是否存在 判断都成立
@ConditionalOnProperty(
prefix = "spring.http.encoding",
value = {"enabled"},
matchIfMissing = true
)
public class HttpEncodingAutoConfiguration {
//该类的 成员属性 已经通过注解与配置文件中的配置绑定
private final HttpEncodingProperties properties;
public HttpEncodingAutoConfiguration(HttpEncodingProperties properties) {
this.properties = properties;
}
//给容器中添加一个组件,这个组件的部分值需要从 properties中获取
@Bean
//判断容器中是否 存在CharacterEncodingFilter组件: 不存在才添加
@ConditionalOnMissingBean({CharacterEncodingFilter.class})
public CharacterEncodingFilter characterEncodingFilter() {
CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
filter.setEncoding(this.properties.getCharset().name());
filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST));
filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE));
return filter;
}
//将配置文件中的spring.http.encoding.xx值 和该类的 成员属性相绑定
@ConfigurationProperties(
prefix = "spring.http.encoding"
)
public class HttpEncodingProperties {
9.3 总结:
- SpringBoot启动时会添加大量的自动配置类
- 查看我们需要的功能是否有SpringBoot写好的自动配置类
- 可以查看配置类配置了那些组件,如果需要自己编写自动配置类
- 自动配置类 给容器中添加组件的时候,需要从properties中获取属性值,这个属性值我们可以通过配置文件修改
9.4 如何判断自动配置类是否生效
- 给properties文件中添加 debug=true : 运行项目可以在控制面板打印自动配置类 加载信息
10 日志框架
10.1 框架组合
- 抽象层(SLF4J) + 实现层 JAVA(JUL)、spring(jcl)、log4j
10.2 日志实现流程
-
调用抽象层接口,实现层实现抽象层接口
-
日志统一
-
//由于 java srping log4j都有自己的日志框架,所以项目中需要将日志框架统一,只需要配置一个框架的配置文件 统一方法: 将引入框架中的日志依赖jar排除,不用做任何配置,SpringBoot会自动和引入的统一日志框架适配
10.3 如何查看pom文件依赖图
右击POM文件,选择Diagarms
10.4 日志框架使用
-
private Logger logger = LoggerFactory.getLogger(xxxx.class);
-
//追踪日志 logger.trace("trace"); logger.debug("debug"); logger.info("info"); logger.warn("warn"); logger.error("error");
-
#properties配置: logger.level.包路径(不填则修改整个项目) = trace/.../... 默认日志级别 INFO logger.file = 路径/日志文件名称.log 生成日志文件(默认文件名 springboot.log) 不指定路径则在当前项目下生成 logger.path = 路径 和logger.file只生效一个 该配置优先级高 logger.pattern.console= ......在控制台打印日志的格式 logger.pattren.file=..........日志文件中的输出格式
10.5 日志框架自定义配置
- 根据使用的日志框架,创建对应名称的xml文件放入Resources包中即可
框架 | 需要配置文件名 |
---|---|
Logback | logback-spring.xml , logback-spring.groovy , logback.xml , logback.groovy |
Log4j2 | log4j2-spring.xml , log4j2.xml |
java JUL | logging.properties |
- 配置文件名称的区别
#logback-spring.xml OR logback.xml举例
#logback.xml:由日志框架直接加载,绕过spring框架
#logback-spring.xml: 由Spring框架加载,可以使用spring的高级功能
#高级功能举例: 可以设置某一段配置 只在某个环境下生效
dev:只在开发环境生效
<springProfile name="dev">
<!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>