- 
配置maven使用的jdk版本为1.8:找到maven安装路径下的配置文件,例如我的是:E:\apache-maven-3.6.1\conf\settings.xml,给profiles标签添加以下内容:
<profile>    
    <id>jdk-1.8</id>    
    <activation>    
        <activeByDefault>true</activeByDefault>    
        <jdk>1.8</jdk>    
    </activation>    
    <properties>    
        <maven.compiler.source>1.8</maven.compiler.source>    
        <maven.compiler.target>1.8</maven.compiler.target>    
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>    
    </properties>     
</profile>
- SpringBoot使用3种类型的全局配置文件,配置文件名application是固定的。作用:修改SpringBoot自动配置的默认值。配置文件放在src/main/resources目录或者类路径/config下。
- 
YAML:以数据为中心,比json、xml等更适合做配置文件。
application.properties
application.yml
application.yaml
YAML语法
- 以空格缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级。
- 
键值对:k: v。如果冒号之后有值,那么冒号和值之间至少有一个空格,不能紧贴着。
- 
字符串:默认不用加上单引号或者双引号;
- 
双引号;会转义字符串里面的特殊字符。例如:name: "zhangsan \n lisi":输出;zhangsan 换行 lisi。
- 
单引号;不会转义特殊字符。例如:name: 'zhangsan \n lisi':输出;zhangsan \n lisi。
- 
Object、Map(属性和值)按照键值对k: v的写法。例如:
# 注意缩进(层级之间为2个空格)
person:
  name: 张三
  gender: 男
  age: 22
# 行内写法:
person: {name: 张三,gender: 男,age: 22}
- 
数组、List、Set用- 值表示数组或集合中的一个元素。例如:
# 注意缩进(层级之间为2个空格)
fruits: 
  - 苹果
  - 桃子
  - 香蕉
# 行内写法:
fruits: [苹果,桃子,香蕉]
- 读取.propterties文件中的中文时出现乱码?原因:idea默认使用utf-8编码,而properties文件默认使用ASCII编码。解决方案:IDEA左上角File--->Settings--->搜索File Encodings--->修改下图对应的位置即可

- 配置文件值注入有两种方式,一个是Spring Boot的@ConfigurationProperties注解,另一个是Spring原先的@value注解。
| 功能 | 松散绑定(松散语法) | SpEL | JSR303数据校验 | 复杂类型封装 | |
|---|---|---|---|---|---|
| @ConfigurationProperties | 批量注入配置文件中的属性 | 支持 | 不支持 | 支持 | 支持 | 
| @Value | 一个个指定 | 不支持 | 支持 | 不支持 | 不支持 | 
- Profile是Spring对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境。
- 多profile文件形式:文件名格式:application-{profile}.properties/yml,例如:
application-dev.properties #开发环境
application-prod.properties #生产环境
- Springboot默认加载application.properties/yml配置文件,可以在默认加载的配置文件中激活加载指定的profile文件,例如:spring.profiles.active=dev。
- yml文件支持多文档块方式,例如:
server:
  port: 8082
spring:
  profiles:
    active: dev # 激活dev环境配置
--- # 每个文档块使用---分割
server:
  port: 8888
spring:
  profiles: dev # 命名当前文档块的环境名
---
server:
  port: 8090
spring:
  profiles: prod
- 激活指定的端口号也可在命令行运行时添加参数--spring.profiles.active=dev,另外还可以设置虚拟机参数VM options:-Dspring.profiles.active=dev。


- springboot启动时会扫描以下位置的application.properties/yml文件作为Springboot的默认配置文件。优先级由高到底。高优先级的配置会覆盖低优先级的配置。SpringBoot会从这四个位置全部加载主配置文件,形成互补配置。
file:./config/
file:./
classpath:/config/
classpath:/
- 
外部配置加载顺序:优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置
- @Conditional派生注解:只有- @Conditional指定的条件成立时,才给容器中添加组件,里面配置的所有内容才能生效。
| @Conditional扩展注解 | 作用(判断是否满足当前指定条件) | 
|---|---|
| @ConditionalOnJava | 系统的java版本符合要求 | 
| @ConditionalOnBean | 容器中存在指定Bean | 
| @ConditionalOnMissingBean | 容器中不存在指定Bean | 
| @ConditionalOnExpression | 满足指定的SpEL表达式 | 
| @ConditionalOnClass | 系统中有指定的类 | 
| @ConditionalOnMissingClass | 系统中没有指定的类 | 
| @ConditionalOnSingleCandidate | 容器中只有一个指定的Bean,或者这个Bean是首选Bean | 
| @ConditionalOnProperty | 系统中指定的属性有指定的值 | 
| @ConditionalOnResource | 类路径下存在指定资源文件 | 
| @ConditionalOnWebApplication | 当前是web环境 | 
| @ConditionalOnNotWebApplication | 当前不是web环境 | 
| @ConditionalOnJndi | JNDI存在指定项 | 
- 在配置文件启用 - debug=true,运行时就可以在控制台中看到加载和没有加载了哪些自动配置类。其中,- Positive matches表示启用的自动配置类;- Negative matches:表示没有启用的自动配置类。
- 市面上的日志框架有: - JUL、- JCL、- Jboss-logging、- logback、- log4j、- log4j2、- slf4j....
| 日志门面 (日志的抽象层) | 日志门面 (日志的抽象层) | 
|---|---|
|  |  | 
- 左边选一个门面(抽象层),右边选一个实现。例:SpringBoot选用SLF4j-->Logback
- 用法参考slf4j官方文档
- 项目中可能使用不同的日志框架:Spring(commons-logging)、Hibernate(jboss-logging)...
- 如何将项目中的所有日志框架统一到slf4j?
- SpringBoot能自动适配所有的日志,而且其底层使用slf4j+logback的方式记录日志,引入其它框架时,只需要把这个框架依赖的日志框架排除掉即可。
- 输出日志级别:优先级由低到高:trace<debug<info<warn<error
- 在.properties配置文件中修改输出日志的默认配置:
| logging.file | logging.path | Example | Description | 
|---|---|---|---|
| (none) | (none) | 只在控制台输出 | |
| 指定文件名 | (none) | my.log | 默认输出日志到当前项目根路径下的my.log文件 | 
| (none) | 指定目录 | /spring/log | 输出日志到当前项目所在磁盘的根路径下的/spring/log/spring.log 文件 | 
- 如果在项目的类路径下放置每个日志框架自定义的配置文件,那么SpringBoot启动时就不再使用它的默认配置。若使用logback.xml配置文件,则其直接被日志框架识别了;若使用logback-spring.xml配置文件,日志框架就不直接加载日志的配置项,而是由SpringBoot解析日志配置,即可以使用SpringBoot的高级Profile功能。
| Logging System(使用的日志框架) | Customization(自定义输出日志配置文件名) | 
|---|---|
| Logback | logback-spring.xml,logback-spring.groovy,logback.xmlorlogback.groovy | 
| Log4j2 | log4j2-spring.xmlorlog4j2.xml | 
| JDK (Java Util Logging) | logging.properties | 
<springProfile name="staging">
    <!-- configuration to be enabled when the "staging" profile is active -->  
   <!--  可以指定某段配置只在某个环境下生效 -->  
</springProfile>
- 切换日志框架:可以按照slf4j的日志适配图,进行相关的切换。

静态资源映射规则
- 所有访问/webjars/**,都是去classpath:/META-INF/resources/webjars/路径下找资源。webjars:以jar包的方式引入静态资源。
- 参考webjars官网
- 访问jquery-webjars中静态资源文件jquery.js的url为:http://localhost:8080/webjars/jquery/3.4.0/jquery.js

- 
/**表示访问当前项目的任何静态资源文件,先去controller层中找是否有对应的处理请求,否则默认去以下4个路径中查找静态资源文件:
"classpath:/META-INF/resources/"
"classpath:/resources/"
"classpath:/static/"
"classpath:/public/"
- 非webjars资源,自定义的静态资源css、js、img文件全部放在static静态资源目录下,如访问Chart.mid.js文件的url为:http://localhost:8080/js/Chart.min.js;访问url:http://localhost:8080/则会默认寻找静态资源目录下的index.html文件。

- 设置网站图标只需将一个favicon.ico图片放在静态资源目录下即可。
- 在.properties文件中设置默认访问静态资源文件的路径:spring.resources.static-locations=classpath:/hello,classpath:/zzw/
- 常见的模板引擎有:JSP、Velocity、Freemarker、Thymeleaf等。SpringBoot推荐使用Thymeleaf,在pom.xml文件中引入相关依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
- 只要把html页面放在classpath:/templates/目录下,thymeleaf模板引擎就能自动渲染页面。创建html页面后导入thymeleaf的名称空间,才能使用其功能语法:
<html lang="en" xmlns:th="http://www.thymeleaf.org">
thymeleaf的语法规则
- 
th:text--> 改变当前元素里面的文本内容;
- 
th:任意html属性--> 替换原生属性的值

- IDEA更改全局.properties文件的默认编码方法:












