Spring Boot 优点
- 快速创建独立运行的 Spring 项目以及与主流框架集成
- 使用嵌入式的 Servlet 容器,应用无需打成 WAR 包
- starters 自动依赖与版本控制
- 大量的自动配置,简化开发,也可以修改默认值
- 无需配置 XML,无代码生成,开箱即用
- 准生产环境的运行时应用监控
- 与云计算的天然集成
YAML 文件
- 字符串默认不用加上单引号或者双引号
- 字符串加双引号:不会转义字符串里面的特殊字符
- 字符串加单引号:会转义字符串里面的特殊字符
- 对象表示:
friend:
lastName: zhanghui
age: 18
friend: {lastName: zhanghui, age: 18}
- 数组表示:
pet:
- cat
- dog
- pig
pet: [cat,dog,pig]
注解
// 全局配置文件
@ConfigurationProperties(prefix="haha")
// 指定路径配置文件
@PropertySource(value={"classpath:haha.properties"})
// 导入 Spring 的配置文件
@ImportResource(locations={"classpath:haha.xml"})
配置类
@Configuration
public class MyAppConfig{
// 将方法的返回值添加到容器中,方法名为 id
@Bean
public Person person() {
return new Person();
}
}
配置文件占位符
- 随机数
${random.value}
${random.int}
${random.long}
${random.int(10)}
${random.int[1,10]}
- 占位符获取之前配置的值,如果没有可以使用:指定默认值
person.dog.name=${person.name:zhanghui}_dog
Profile
- 多 Profile 文件
主配置文件可以命名为:application-{profile}.properties/yml
默认使用 application.properties 的配置 - 激活指定的 Profile 文件
spring.profiles.active=dev
- YML 文件支持多 文档块
server:
port: 8081
spring:
profiles:
active: prod
---
server:
port: 8082
spring:
profiles: prod
- 激活方式:
// 命令行
--spring.profiles.active=dev
// 配置文件
spring.profiles.active=dev
// jvm 参数
-Dspring.profiles.active=dev
配置文件加载(优先级由高到低):
SpringBoot 会从这四个位置全部加载主配置文件;互补配置
命令行 --spring.config.location 改变默认配置
- file:./config/
- file:./
- classpath:/config/
- classpath:/
外部配置加载顺序(优先级由高到低)
- 命令行参数
- jar 包外部的 application-{profile}.properties 或 application.yml
- jar 包内部的 application-{profile}.properties 或 application.yml
- jar 包外部的 application.properties 或 application.yml
- jar 包内部的 application.properties 或 application.yml
自动配置原理
- Spring Boot 启动的时候加载主配置类,开启了自动配置功能 @EnableAutoConfiguration
- @EnableAutoConfiguration 利用 AutoConfigurationImportSelector 的 selectImports() ,将类路径下 META-INF/spring.factories 里面配置的所有 EnableAutoConfiguration 的值加入到容器中
- 每一个 xxAutoConfiguration 类都是容器中的一个组件,每一个自动配置类完成一种自动配置功能
- 分析 HttpEncodingAutoConfiguration 类:
@Configuration(proxyBeanMethods = false)
// 启动指定类的 ConfigurationProperties 功能,将配置文件中对应的值和 HttpEncodingProperties 绑定起来
@EnableConfigurationProperties({HttpProperties.class})
// 判断当前应用是否是web应用,如果是,配置类生效
@ConditionalOnWebApplication(type = Type.SERVLET)
// 判断当前项目有没有这个类
// springmvc 中解决乱码的过滤器
@ConditionalOnClass({CharacterEncodingFilter.class})
// 判断配置文件中是否存在配置:spring.http.encoding.enabled
// 如果不存在,值默认为 true
@ConditionalOnProperty(
prefix = "spring.http.encoding",
value = {"enabled"},
matchIfMissing = true
)
public class HttpEncodingAutoConfiguration {
// 从配置文件中获取指定的值和 bean 的属性进行绑定
@ConfigurationProperties(prefix = "spring.http")
public class HttpProperties {
日志
- Spring 框架默认使用 JCL(Jakarta Commons Logging)
- SpringBoot 框架默认使用 SLF4j 和 logback
- 日志级别(由低到高):
1、trace
2、debug
3、info
4、warn
5、error
# 设置日志级别
logging.level.com.zh=trace
# 不指定路径在当前项目下生成 springboot.log 日志
# 在当前磁盘的根路径下创建,使用 spring.log 作为默认文件
logging.path=/springboot/log
# 指定文件
logging.file=G:/springboot.log
- logback.xml 和 logback.spring.xml
logback.xml :直接被日志框架识别
logback.spring.xml :由 SpringBoot 解析日志配置,而不是被直接加载到日志配置项,支持一些高级功能
<springProfile name="staging">
指定某段配置只在某个环境下生效
</springProfile>