目录
1 Spring Boot 的创建
2 简单 Spring Boot 程序
3 Spring Boot 配置文件
3.1 properties 基本语法
3.2 yml 配置文件说明
3.2.1 yml 基本语法
3.3 配置文件里的配置类型分类
3.4 不同配置环境下的配置文件
4 Spring Boot 打印日志
4.1 默认打印的日志
4.2 自定义打印日志
4.3 给某个文件夹单独设置日志级别
4.4 日志持久化
4.5 设置日志的时间打印格式
5 lombok
5.1 前置工作
5.2 使用 lombok 更加简单地输出日志
Spring Boot 是 Spring 的脚手架,是专门为了快速开发 Spring 框架而诞生的。
JDK 1.8 对应的 Spring Boot 版本为 2.7.14
创建时添加的依赖如下:
将不需要的文件删除:
后续创建的类与下面的启动类放在同一级目录:
以前的 Spring 只是一个普通的 Java 项目,没有办法直接与浏览器进行互动,而如今可以使用 Spring Boot 来实现浏览器和用户的交互。
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@ResponseBody
@RequestMapping("/user")
public class UserController {
@RequestMapping("/sayhi")
public String sayHi(){
return "Hi, Spring Boot.";
}
}
在网址输入:
http://localhost:8080/user/sayhi
需要注意的是,需要将该类和启动类放置到同级目录下。
Spring Boot 具备以下优点:
1. 快速集成框架,Spring Boot 在创建时就可以添加依赖
2. 内置运行容器,无需配置 Tomcat 等 Web 容器,可以直接运行和部署程序
3. 快速部署项目,无需外部容器即可启动并运行项目
4. 抛弃繁琐的 XML ,使用注解和配置的方式进行开发
Spring Boot 的设计思想是约定大于配置。类上标注着 @SpringBootApplication 就可以启动 Spring Boot 项目了。
Spring Boot 里有两种配置文件:
application.properties,是创建 Spring Boot 项目时默认的文件格式
application.yml,需要用户自己来创建,属于新版的配置文件
特殊说明:
1. 如果 properties 和 yml 一起存在于同一个项目中,如果两个配置文件出现了同样的配置,都配置了 server.port,properties 是 8081,而 yml 设置成 8089,那么会以 properties 中的配置为主,也就是说,properties 配置文件的优先级更高。
2. 理论上两种配置文件可以共存,但在实际工作中,还是会选择其中一种配置文件,为了以后更好地维护。
properties 以键值对的形式书写,key 和 value 之间以 “=”连接的。如:
# 配置项目端口号
server.port=8089
小技巧:配置文件中使用 # 来添加注释信息
properties 会出现中文乱码问题,需要手动设置一下:
Settings 以及 New Projects Setup 中勾选如下:
这种语法格式也就意味着,properties 配置文件中会产生冗余的代码,比如:
# MySQL 配置项
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/myblog
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
同样的功能,换了 yml 配置文件会如何呢?且看下一小节内容。
yml 是 YAML 的缩写,全称为 Yet Another Markup Language,其中文就是 “另一种标记语言”。
yml 优点分析:
1. 可读性高,写法简单,语法与 JSON 语言类似
2. 支持更多的数据类型
3. 支持更多编程语言,Java、Golang、PHP、Python、Ruby、JavaScript、Perl 中
yml 是树形结构的配置文件,基础语法是 key: value,注意 key 和 value 之间使用英文冒号加空格的方式组成,其中的空格不可以省略。
# 使用 yml 连接数据库
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/myblog
username: root
password: 123456
配置类型分类:
1. 系统配置项,给系统(框架)使用的,比如 server.port
2. 用户自定义配置,开发者自己使用,如 myImage.path
那对于用户自定义配置,用户该如何读取呢?
在项目中想要读取配置文件中的内容,可以使用 @Value 注解来实现。
@Value 注解使用 "${}" 的格式来读取,见如下代码:
# 用户自定义配置项
myImage.path=d:\\image\\
package com.example.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
@RestController
public class TestController {
@Value("${myImage.path}")
private String myImage;
@RequestMapping("/sayhi")
public String sayHi(){
System.out.println(LocalDateTime.now() + "日志"
+ "com.example.demo.TestController");
return "你好,Spring Boot ->" + myImage;
}
}
# 指定配置文件的运行环境
spring.profiles.active=test
日志级别:
trace:日志级别最低
debug:调试日志级别
info:普通日志级别
warn:警告日志级别
error:错误日志级别
fatal:致命日志级别,只有系统在崩溃时才会输出的日志级别,级别最高
日志级别作用:过滤星系,将业务不需要的日志屏蔽掉
问题:Spring Boot 如何打印日志?
Spring Boot 内置了两个日志框架:SLF4J + LogBack
SLF4J 是让开发者使用和调用的框架,而 LogBack 是最底层实现日志相关操作的框架
从左到右依次是:
日志发生的时间,日志级别,打印日志的线程 id,打印日志线程名称,日志打印的位置(包名+类名)以及日志内容
通过日志工程得到日志对象 -> 通过日志对象提供的打印方法来实现打印
package com.example.demo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class LogController {
// 1. 得到日志对象
private static Logger log =
LoggerFactory.getLogger(LogController.class);
@RequestMapping("/log")
public void log(){
String msg = "今天周五,没有刮台风的一天";
log.trace("trace -> " + msg);
log.debug("debug -> " + msg);
log.info("info -> " + msg);
log.warn("warn -> " + msg);
log.error("error -> " + msg);
}
}
# 当前项目默认的日志级别
logging.level.root=info
# 给 Controller 这个文件夹单独设置日志级别
logging.level.com.example.demo.Controller=debug
Spring Boot 还支持将日志保存到磁盘中。
# 设置日志的保存路径
logging.file.path=C:\\image\\
# 设置日志的保存文件名
logging.file.name=C:\\image\\springboot.log
日志的添加方式不是覆盖,而是叠加。
# 设置日志时间的打印格式
logging.pattern.dateformat=yyyy-MM-dd HH:mm:ss
安装一个 lombok 插件
在项目中添加 lombok 依赖
之后便可以使用 lombok 来编写代码了。
package com.example.demo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
public class LogController2 {
@RequestMapping("/log2")
public void log2() {
String msg = "今天周五,没有刮台风的一天";
log.trace("trace -> " + msg);
log.debug("debug -> " + msg);
log.info("info -> " + msg);
log.warn("warn -> " + msg);
log.error("error -> " + msg);
}
}
@SLF4J
// 等同于以下代码
private static Logger log = LoggerFactory.getLogger(LogController.class);
Lombok 实现的原理:在代码编译期(.java 文件)时,将 lombok 的注解转换成相应的代码,之后再编译成字节码文件(.class),再交由 JVM 来处理。