1. SpringBoot应用回顾
1.1 约定优于配置
概念:约定优于配置(Convention over Configuration),又称按约定编程,是一种软件设计规范。本质上是对系统、类库或框架中一些东西假定一个大众化合理的默认值(缺省值)。
1.2 SpringBoot概念
1.2.1 什么是SpringBoot
通过Spring Boot,可以轻松地创建独立的,基于生产级别的基于Spring的应用程序,并且可以“运行”它们。其实Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件。
1.2.2 SpringBoot主要特性
- SpringBoot Starter:他将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次
性添加到项目的Maven或Gradle构建中; - 使编码变得简单,SpringBoot采用 JavaConfig的方式对Spring进行配置,并且提供了大量的注解,
极大的提高了工作效率。 - 自动配置:SpringBoot的自动配置特性利用了Spring对条件化配置的支持,合理地推测应用所需的
bean并自动化配置他们; - 使部署变得简单,SpringBoot内置了三种Servlet容器,Tomcat,Jetty,undertow.我们只需要一个
Java的运行环境就可以跑SpringBoot的项目了,SpringBoot的项目可以打成一个jar包。
1.3 SpringBoot 案例实现
1.3.1 案例实现
案例需求:使用Spring Initializr方式构建Spring Boot项目,并请求Controller中的目标方法,将返回值响应到页面
(1)使用Spring Initializr方式构建Spring Boot项目
本质上说,Spring Initializr是一个Web应用,它提供了一个基本的项目结构,能够帮助我们快速构建一个基础的Spring Boot项目。
Spring Boot项目就创建好了。创建好的Spring Boot项目结构如图:
(2)创建Controller
com.lagou包下创建名称为controller的包,在该包下创建一个请求处理控制类HelloController,并编写一个请求处理方法
(3) 运行项目
运行主程序启动类SpringbootDemoApplication,项目启动成功后,在控制台上会发现Spring Boot项目默认启动的端口号为8080,此时,可以在浏
览器上访问“http://localhost:8080/hello”
1.4 全局配置文件
全局配置文件概述及优先级
全局配置文件能够对一些默认配置值进行修改及自定义配置。
Spring Boot使用一个application.properties或者application.yaml的文件作为全局配置文件
SpringBoot会从这四个位置全部加载主配置文件,如果高优先级中配置文件属性与低优先级配置文件不冲突的属性,则会共同存在—互补配置。
如果我们的配置文件名字不叫application.properties或者application.yml,可以通过以下参数来指定配置文件的名字,myproject是配置文件名
注意:
Spring Boot 2.4 改进了处理 application.properties 和 application.yml 配置文件的方式。
如果是2.4.0之前版本,优先级properties>yaml
但是如果是2.4.0的版本,优先级yaml>properties
如果想继续使用 Spring Boot 2.3 的配置逻辑,也可以通过在application.properties 或者application.yml 配置文件中添加以下参数:
1.5 属性注入
使用Spring Boot全局配置文件设置属性时:
如果配置属性是Spring Boot已有属性,例如服务端口server.port,那么Spring Boot内部会自动扫描并读取这些配置文件中的属性值并覆盖默认属性。
如果配置的属性是用户自定义属性,例如刚刚自定义的Person实体类属性,还必须在程序中注入这些配置属性方可生效。
1.5.1 属性注入常用注解
@Configuration:声明一个类作为配置类
@Bean:声明在方法上,将方法的返回值加入Bean容器
@Value:属性注入
@ConfigurationProperties(prefix = “jdbc”):批量属性注入
@PropertySource(“classpath:/jdbc.properties”)指定外部属性文件。在类上添加
1.5.2 @Value属性值注入
1.引入数据源连接依赖
2.application.properties添加信息
3.配置数据源
1.5.3 @ConfigurationProperties批量注入
2.application.properties添加信息
3.查看效果
1.5.4 第三方配置
除了 @ConfigurationProperties 用于注释类之外,您还可以在公共 @Bean 方法上使用它。当要将属性绑定到控件之外的第三方组件时,这样做特别有用。
效果演示:
1.5.5 松散绑定
Spring Boot使用一些宽松的规则将环境属性绑定@ConfigurationProperties bean,因此环境属性名和bean属性名之间不需要完全匹配
1.6 SpringBoot日志框架
1.7.1 日志框架介绍
在项目的开发中,日志是必不可少的一个记录事件的组件,不管是记录运行情况还是追踪线上问题,都离不开对日志的分析,所以也会相应的在项目中实现和构建我们所需要的日志框架。
通常情况下,日志是由一个抽象层+实现层的组合来搭建的。
1.6.2 SLF4J 的使用
在开发的时候不应该直接使用日志实现类,应该使用日志的抽象层。具体参考 SLF4J 官方。
下图是 SLF4J 结合各种日志框架的官方示例,从图中可以清晰的看出 SLF4J API 永远作为日志的门面,直接应用与应用程序中。
1.6.3. 统一日志框架的使用
一般情况下,在项目中存在着各种不同的第三方 jar ,且它们的日志选择也可能不尽相同,显然这样是
不利于我们使用的,那么如果我们想为项目设置统一的日志框架该怎么办呢?
在 SLF4J 官方,也给了我们参考的例子
统一日志框架使用步骤归纳如下:
- 排除系统中的其他日志框架。
- 使用中间包替换要替换的日志框架。
- 导入我们选择的 SLF4J 实现
1.6.4. Spring Boot 的日志关系
1. 排除其他日志框架
根据上面总结的要统一日志框架的使用,第一步要排除其他的日志框架,在 Spring Boot 的 Maven 依
赖里可以清楚的看到 Spring Boot 排除了其他日志框架。
2 . 统一框架引入替换包
Spring Boot 是使用了 SLF4J+logback 的日志框架组合,查看 Spring Boot 项目的 Maven 依赖关系可以看到 Spring Boot 的核心启动器 spring-boot-starter 引入了 spring-boot-starter-logging.
而 spring-boot-starter-logging 的 Maven 依赖主要引入了 logback-classic (包含了日志框架 Logback的实现),log4j-to-slf4j (在 log4j 日志框架作者开发此框架的时候还没有想到使用日志抽象层进行开发,因此出现了 log4j 向 slf4j 转换的工具),jul-to-slf4j ( Java 自带的日志框架转换为 slf4j)
1.6.5. Spring Boot 的日志使用
日志级别和格式
Spring Boot 默认已经使用了 SLF4J + LogBack .
日志级别从小到大为 trace < debug < info < warn < error . SpringBoot 默认日志级别为 INFO.
结合Logback 日志格式可以知道 Spring Boot 默认日志格式是
1.6.6 自定义日志输出
可以直接在配置文件编写日志相关配置
关于日志的输出路径,可以使用 logging.file 或者 logging.path 进行定义,两者存在关系如下表。