SpringBoot学习笔记

  • 配置maven使用的jdk版本为1.8:找到maven安装路径下的配置文件,例如我的是:E:\apache-maven-3.6.1\conf\settings.xml,给profiles标签添加以下内容:
    
    jdk-1.8    
        
        true    
        1.8    
        
        
        1.8    
        1.8    
        1.8    
         

  • 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
IDEA中2种参数设置方式
cmd添加配置参数
  • springboot启动时会扫描以下位置的application.properties/yml文件作为Springboot的默认配置文件。优先级由高到底。高优先级的配置会覆盖低优先级的配置。SpringBoot会从这四个位置全部加载主配置文件,形成互补配置
file:./config/
file:./
classpath:/config/
classpath:/
  • 外部配置加载顺序:优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置
  1. 命令行参数,所有配置都可以在命令行上进行指定,例如:java -jar xxx.jar --server.port=8087 --server.context-path=/abc多个配置用空格分开; --配置项=值
  2. 来自java:comp/env的JNDI属性
  3. Java系统属性(System.getProperties())
  4. 操作系统环境变量
  5. RandomValuePropertySource配置的random.*属性值
    由jar包外向jar包内进行寻找优先加载带profile
  6. **jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
  7. **jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
    再来加载不带profile
  8. jar包外部的application.properties或application.yml(不带spring.profile)配置文件
  9. **jar包内部的application.properties或application.yml(不带spring.profile)配置文件
  • 参考SpringBoot官方文档

  • @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:表示没有启用的自动配置类。

  • 市面上的日志框架有:JULJCLJboss-logginglogbacklog4jlog4j2slf4j....

日志门面 (日志的抽象层) 日志门面 (日志的抽象层)
JCL(Jakarta Commons Logging、SLF4j(Simple Logging Facade for Java)、jboss-logging JUL(java.util.logging)Log4j、Log4j2、Logback
  • 左边选一个门面(抽象层),右边选一个实现。例:SpringBoot选用SLF4j-->Logback
  • 用法参考slf4j官方文档
  • 项目中可能使用不同的日志框架:Spring(commons-logging)、Hibernate(jboss-logging)...
  • 如何将项目中的所有日志框架统一到slf4j?
  1. 将系统中其他日志框架先排除出去;
  2. 用中间包来替换原有的日志框架;
  3. 导入slf4j其他的实现。
  • SpringBoot能自动适配所有的日志,而且其底层使用slf4j+logback的方式记录日志,引入其它框架时,只需要把这个框架依赖的日志框架排除掉即可。
  • 输出日志级别:优先级由低到高:trace
  • .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.xml or logback.groovy
Log4j2 log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging) logging.properties

      
     

  • 切换日志框架:可以按照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
image.png
  • /**表示访问当前项目的任何静态资源文件,先去controller层中找是否有对应的处理请求,否则默认去以下4个路径中查找静态资源文件:
"classpath:/META-INF/resources/"
"classpath:/resources/"
"classpath:/static/"
"classpath:/public/"
  • 非webjars资源,自定义的静态资源cssjsimg文件全部放在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/
  • 常见的模板引擎有:JSPVelocityFreemarkerThymeleaf等。SpringBoot推荐使用Thymeleaf,在pom.xml文件中引入相关依赖:

    org.springframework.boot
    spring-boot-starter-thymeleaf

  • 只要把html页面放在classpath:/templates/目录下,thymeleaf模板引擎就能自动渲染页面。创建html页面后导入thymeleaf的名称空间,才能使用其功能语法:

thymeleaf的语法规则

  • th:text --> 改变当前元素里面的文本内容;
  • th:任意html属性 --> 替换原生属性的值

更多用法参考Thymeleaf官方文档

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

你可能感兴趣的:(SpringBoot学习笔记)