文章目录

  • 1. 什么是Spring Boot?
  • 2. 如何创建Spring Boot项目?
  • 3. 验证Spring Boot项目的创建
  • 3.1 补充添加依赖
  • 3.2 代码示例
  • 4. Spring Boot配置文件
  • 4.1 配置文件的作用
  • 4.2 配置文件的格式
  • 4.2.1 properties的语法
  • 4.2.2 yml的语法
  • 4.2.3 properties与yml的对比
  • 4.2.4 设置不同环境下的配置文件
  • 4.3 更多的系统配置项
  • 5. Spring Boot日志文件
  • 5.1 日志的作用
  • 5.2 自定义打印日志
  • 5.3 日志级别
  • 5.4 日志持久化


1. 什么是Spring Boot?

Spring Boot就是Spring的脚手架,目的是简化Spring程序开发的

使用Spring Boot框架的优点:

  • 可快速集成框架,使得添加jar包相当方便
  • 内置了Tomcat等Web容器
  • 可快速部署项目
  • 抛弃繁琐的xml,使用注解和配置的方式进行开发
  • 支持更多的监控指标,更直观容易的观察项目的运行情况

2. 如何创建Spring Boot项目?

需要先在idea中安装Spring Boot Helper插件

springboot linux日志文件太大 springboot项目日志文件_配置文件

安装后显示这样

springboot linux日志文件太大 springboot项目日志文件_配置文件_02

创建项目的时候选择Spring Initializr,而不是Maven

springboot linux日志文件太大 springboot项目日志文件_spring boot_03

设置项目参数

springboot linux日志文件太大 springboot项目日志文件_spring boot_04

注意Spring Boot的版本选择2.x,因为3.x需要jdk17以上

springboot linux日志文件太大 springboot项目日志文件_开发语言_05

设置项目名称与项目路径

springboot linux日志文件太大 springboot项目日志文件_开发语言_06

创建完成后,添加maven项目的支持

springboot linux日志文件太大 springboot项目日志文件_spring boot_07

第一次创建可能需要等待一定时间

springboot linux日志文件太大 springboot项目日志文件_spring boot_08

点击启动类,出现如下所示说明项目可以启动成功

springboot linux日志文件太大 springboot项目日志文件_java_09

删除一些不需要的文件

springboot linux日志文件太大 springboot项目日志文件_开发语言_10

项目目录说明

springboot linux日志文件太大 springboot项目日志文件_配置文件_11

3. 验证Spring Boot项目的创建

3.1 补充添加依赖

项目创建后,如果我们需要添加一些别依赖,可以使用两种方式:

  1. 在Maven中央仓库中找到需要添加的依赖,复制粘贴到pom.xml中
  2. 使用下面操作的方式

添加EditStarters插件

springboot linux日志文件太大 springboot项目日志文件_spring_12

在pom.xml中右键,点击Generate...

springboot linux日志文件太大 springboot项目日志文件_spring boot_13

点击Edit Starters

springboot linux日志文件太大 springboot项目日志文件_spring boot_14

点击OK

springboot linux日志文件太大 springboot项目日志文件_java_15

选择添加需要的依赖后,点击OK即可

springboot linux日志文件太大 springboot项目日志文件_spring_16

3.2 代码示例

我们在启动类的同级或者子目录下,创建一个类TestHello

springboot linux日志文件太大 springboot项目日志文件_spring boot_17

@Controller
@ResponseBody
public class TestHello {
    @RequestMapping("/hello")
    public String hello(){
        return "hello spring boot";
    }
}

注解的作用后面在Spring MVC章节里详细讲

启动项目成功后,在浏览器输入url:http://localhost:8080/hello,会出现如下内容

springboot linux日志文件太大 springboot项目日志文件_开发语言_18


此时说明我们的Spring Boot创建并启动成功

4. Spring Boot配置文件

4.1 配置文件的作用

数据库连接信息
项目的启动端口
第三方系统调用的密钥信息
发现与定位问题的普通文件与异常文件

4.2 配置文件的格式

  • properties,Spring Boot项目创建时默认的格式
  • yml(yaml)

这两种配置文件的格式可在一个项目中共存,推荐选择一种使用,不要共存使用

springboot linux日志文件太大 springboot项目日志文件_spring_19

但是如果同时使用了两种格式的配置文件,如果两种格式的配置文件的某个配置项发生冲突,则properties格式的文件优先级更高

4.2.1 properties的语法

properties以键值的形式配置,键和值中间用 = 连接起来(key=value),配置文件中的 # 代表注释信息

# 配置系统端口
server.port=8082
# 配置数据库源
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/blog?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456

这些配置都属于系统配置项(给Spring框架用),用户还可以自定义配置项(可在程序中用)

用户自定义配置

# 自定义配置
name=张三
age=20

在程序中如何读取自定义的配置项呢?

使用 @Value(“${ xxx }”) 的方式可读取用户自定义的配置

@Value("${name}")
    private String name;
    @Value("${age}")
    private int age;

读取的时候,自定义与系统的配置项都可以获取到

properties的优缺点

  • 优点:是系统的默认的配置文件格式,优先级更高
  • 缺点:写法比较冗余

4.2.2 yml的语法

yml是yaml的缩写,它的语法格式为 key: value,其中冒号为英文格式,并且value与冒号中间的空格不可省略

# 系统端口号
server:
  port: 8083
# 数据库源信息
spring:
  datasource:
    username: root
    password: 123456

yml支持更多的数据类型

# 字符串
str1: 你好 \n 你好
str2: '你好 \n 你好'
str3: "你好 \n 你好"

# 布尔值
flag1: true
flag2: false

# 整数
num: 10

# 浮点数
pai: 3.14

# null ~代表null
Node: ~

读取的方式与properties格式相同,使用@Value("${ xxx }")

@Component
public class TestYml {
    @Value("${str1}")
    private String str1;
    @Value("${str2}")
    private String str2;
    @Value("${str3}")
    private String str3;
    @Value("${num}")
    private int num;
    @Value("${flag1}")
    private boolean flag1;
    @Value("${flag2}")
    private boolean flag2;
    @Value("${pai}")
    private double pai;
    @Value("${node}")
    private String node;

    //该注解代表构造方法,初始化bean的时候会调用该方法
    @PostConstruct
    public void construct(){
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
        System.out.println(num);
        System.out.println(pai);
        System.out.println(flag1);
        System.out.println(flag2);
        System.out.println(node);
    }
}

打印结果:

springboot linux日志文件太大 springboot项目日志文件_java_20

从上述字符串的打印发现:

  • 字符串默认可以不用加引号
  • 加单引号,会对特殊字符进行转义,也就是特殊字符也当字符串对待了
  • 加双引号,不会对特殊字符转义,也就是特殊字符有自己的特殊含义,\n代表换行

yml配置对象

# 对象
student1:
  id: 1
  name: 张三
  age: 10
# 对象的行内表示
student2: {id: 2,name: 李四, age: 15}

读取对象使用 @ConfigurationProperties 注解

@Component
@ConfigurationProperties("student1")//这里不需要使用$
@Getter
@Setter //这里是通过set方法赋值属性的,提供set方法
@ToString
public class Student {
    //字段与yml里的名称相同
    private int id;
    private String name;
    private int age;
}

测试类:

@Controller
public class StudentController {
    @Autowired
    private Student student;
    
    @PostConstruct
    public void printStu(){
        System.out.println(student);
    }
}

打印结果:

springboot linux日志文件太大 springboot项目日志文件_配置文件_21

yml配置list集合

# list集合
nametype:
  name:
    - 张三
    - 李四
@Component
@ConfigurationProperties("nametype")
@Setter
@Getter
@ToString
public class TestList {
    private List<String> name;
}
@Controller
public class ListController {
    @Autowired
    private TestList testList;


    @PostConstruct
    public void printList(){
        System.out.println(testList);
    }
}

打印结果:

springboot linux日志文件太大 springboot项目日志文件_java_22

yml的优点

  • 写法简单,易于理解
  • 支持更多的数据类型,如数组,对象等
  • 支持更多的编程语言,Java,Python,Glang等

4.2.3 properties与yml的对比

  • 格式不同,properties是以key=value的格式,yml是以key: value的格式,并且层级之间使用换行缩进方式配置,vlaue与:之间的空格不可省略
  • properties配置存在冗余,yml很好的解决冗余问题
  • properties是项目默认的配置文件格式,yml是后面新的一种配置格式
  • yml的通用性更好,支持更多的语言
  • yml支持更多的数据类型

4.2.4 设置不同环境下的配置文件

一般项目分为三个环境:

  1. 开发环境
  2. 测试环境
  3. 上线运行环境

环境不同可能配置项存在差异,如数据库源,端口号不同等差异

我们可以使用如下配置文件的方式解决:

  • 相同公共的配置放在application.yml(.properties)中
  • 不同环境的配置文件放在application-xxx.yml(.properties)中(xxx可以为任意名字)
  • 一般使用pro为线上环境,dev为开发环境,test为测试环境

在公共的配置文件中(主配置文件)添加如下配置项:

# 设置配置文件的运行平台
spring:
  profiles:
    active: dev

示例:开发环境端口要求4567,测试环境端口要求5678,线上环境端口要求1234

springboot linux日志文件太大 springboot项目日志文件_spring_23

如果改变环境,只需要更改主配置文件application.yml中的配置项spring.profiles.active即可

4.3 更多的系统配置项

链接: 点击获取更多的系统配置项

5. Spring Boot日志文件

5.1 日志的作用

日志最主要的用途就是排除和定位问题

除此外,还可以:

  • 记录用户登录日志,分析用户是正常登录还是恶意破解登录
  • 记录程序的执行时间,为优化项目提供数据支持
  • 记录系统的操作日志,方便数据恢复和定位操作人

我们发现在启动Spring Boot项目的时候,默认就有日志输出

springboot linux日志文件太大 springboot项目日志文件_spring boot_24


因为Spring Boot内置了日志框架SLF4Jlogback,默认的日志是打印在控制台上的

5.2 自定义打印日志

  1. 得到日志对象(每个类都有自己的日志对象
  2. 使用日志对象提供的方法打印日志
private static final Logger log = LoggerFactory.getLogger(TestHello.class);
    @RequestMapping("/hello")
    public String hello(){
        log.trace("Im trace");
        log.info("Im info");
        return "hello spring boot";
    }

springboot linux日志文件太大 springboot项目日志文件_java_25


发现只打印了info,因为日志的默认级别是info,只能打印它与比它更大级别的日志,trace的级别不够

更简单的打印日志

每次都获取到日志对象,然后使用对象调用方法比较繁琐,因为每个类都要进行相同的操作,我们可以简化上述操作,使用如下操作方式:

  1. 添加lombok依赖
  2. 在类上添加 @Slf4j 注解后,在类中就可以直接使用log对象
@Slf4j
public class LogController {
    public void writeLog(){
        log.info("write log"); //添加注解后,就有了log对象
    }
}

lombok的原理

lombok是作用在编译期的,在.java文件编译为字节码文件时候,会给.class文件中添加需要的代码

springboot linux日志文件太大 springboot项目日志文件_spring_26

5.3 日志级别

日志级别可以帮助我们筛选信息,从而节省程序员筛选日志的时间,日志级别可以控制不同环境下,打印日志的详细程度,如开发环境我们需要详细的日志信息,而线上环境我们为了性能,就打印少量的日志

  • trace:级别最低
  • debug:调试级别的,常用于跟踪程序的进展
  • info:普通的打印信息(默认的日志级别)
  • warn:警告级别,不影响使用,但应该注意
  • error:错误级别,错误日志信息打印
  • fatal:致命级别,因代码异常导致程序退出,级别最高

日志的级别越高,打印的日志信息就越少

那如何设置日志的打印级别呢?

在配置文件里,添加系统配置项 logging.level

# 设置日志打印级别
logging:
  level:
    root: debug
    # 指定包下的日志打印级别
    com:
      example:
        demo:
          controller: warn

5.4 日志持久化

上面的日志打印都只是打印在控制台,但是线上我们一般都把日志持久化到文件中,以此方便日后排查问题

日志持久化保存有以下两种方式:

  1. 设置日志的保存路径
  2. 设置日志的保存名称
# 设置日志持久化保存的目录
logging:
  file:
    path: D:\\log
# 设置日志持久化保存的文件名称
logging:
  file:
    name: D:\\log\\springboot.log

运行程序后,会在本地生成一个日志文件,该日志文件是追加写的方式,即重启程序时,日志内容不会消失,也不会覆盖,而是追加写

springboot linux日志文件太大 springboot项目日志文件_spring_27

日志文件的大小默认是10MB,如果超过此大小,会重新创建一个文件保存新日志,可以通过系统配置项来设置这个文件的大小

# 设置日志文件大小的最大值
logging:
  logback:
    rollingpolicy:
      max-file-size: 50MB