SpringBoot(项目创建使用+配置文件+日志文件)

导读:本篇文章讲解 SpringBoot(项目创建使用+配置文件+日志文件),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

1. Spring Boot 项目创建

2. 写一个 Hello World 并运行

3. 配置文件的作用及格式

4. properties 配置文件的基本语法 

5. 读取配置文件

6. yml 配置文件说明

7. properties 和 yml 的区别

8. SpringBoot 日志文件

8.1 日志的作用

8.2 自定义日志打印

8.3 日志的级别

8.4 日志持久化

8.5 更简单的实现日志打印lombok


Spring的出现是为了简化 Java 程序开发,而 SpringBoot 的出现是为了简化 Spring 程序开发.

SpringBoot 就是 Spring脚手架

  • 快速集成框架,SpringBoot 提供了启动添加依赖的功能
  • 内置运行容器,无需配置 Tomcat 等 Web 容器, 直接运行和部署程序
  • 快速部署项目,无需外部容器即可启动并运行项目
  • 可以完全抛弃繁琐的 XML, 使用注解和配置的方式进行开发
  • 支持更多的监控指标, 可以更好的了解项目的运行情况

1. Spring Boot 项目创建

我这里是专业版,不用下载插件直接可以创建

第一次打开 SpringBoot 项目需要加载很久, 因为当前 SpringBoot 框架并没有在自己的本地仓库

SpringBoot(项目创建使用+配置文件+日志文件)

(2) 选取 SpringBoot 的版本, 和需要使用的工具包  

SpringBoot(项目创建使用+配置文件+日志文件)

 (3) Finish后,可以看到创建成功了,直接运行一下,如果出现这个 JVM运行时间就说明创建成功了

SpringBoot(项目创建使用+配置文件+日志文件)

SpringBoot(项目创建使用+配置文件+日志文件) (4) 删除掉无用的目录 

SpringBoot(项目创建使用+配置文件+日志文件)

SpringBoot(项目创建使用+配置文件+日志文件)

2. 写一个 Hello World 并运行

(1) 创建一个类,注意和 Application 平级,写一个方法,返回 Hello World

  1. ​​​​​先加一个 @Controller,    也就是运行项目后,会先找到这个类
  2. 然后再加 @RequestMapping,   这个的作用就是前面找到 @Controller后,有了这个@RequestMapping就会锁定我写的方法 sayHi()   ,注意里面字母都小写
  3. 加@ResponseBody的作用是,我想返回给页面一个非静态的数据(也就是给响应Body中放一个字符串)

SpringBoot(项目创建使用+配置文件+日志文件)

 然后直接运行,页面输入 127.0.0.1:8080/sayhi 可以看到访问成功了

SpringBoot(项目创建使用+配置文件+日志文件)


3. 配置文件的作用及格式

(1) 在整个项目中所有重要的数据都是在配置文件中配置的, 比如:

  • 项目的启动端口
  • 数据库的连接信息 (包含用户名和密码的设置)
  • 第三方系统的调用秘钥等信息
  • 用于发现和定位问题的普通日志和异常日志等

在 Spring Boot 项目中如果没有配置信息,就不能连接和操作数据库, 甚至是不能保存可以用于排查问题的关键日志, 所以配置文件的作用是非常重要的

(2) 配置文件的分类:

  • 系统的配置文件, 比如: 连接字符串, 日志的相关设置
  • 用户自定义的

(3) 配置文件的格式

  •  . properties
  •  . yml

一个项目中可以存在两种配置文件 (properties 和 yml) , 但是不建议这样搞

当一个项目的某个配置, 出现在两种格式的配置文件中时, 那么配置项会以 properties 为主

SpringBoot(项目创建使用+配置文件+日志文件)

SpringBoot(项目创建使用+配置文件+日志文件)

 如果此时修改了配置文件的名字, 重新运行程序, 就访问不到了

SpringBoot(项目创建使用+配置文件+日志文件)

SpringBoot(项目创建使用+配置文件+日志文件)


4. properties 配置文件的基本语法 

 properties 是以键值的形式配置的, key=value  中间是以 “=” 连接的 

SpringBoot(项目创建使用+配置文件+日志文件)

关于 properties 中文乱码的问题处理

因为 properties 是早期的配置文件, 不支持中文, 所以比如当重启 idea 后, 中文就会乱码

可以设置一下

(1) 配置当前项目中文乱码的问题

SpringBoot(项目创建使用+配置文件+日志文件)

 (2) 配置新项目中文乱码的问题

SpringBoot(项目创建使用+配置文件+日志文件)

SpringBoot(项目创建使用+配置文件+日志文件)


5. 读取配置文件

如果在项目中, 想要主动读取配置文件中的内容, 可以使用 @Value 注解来实现

@Value 注解使用 “${}” 的格式读取

SpringBoot(项目创建使用+配置文件+日志文件)

 SpringBoot(项目创建使用+配置文件+日志文件)

 可以看到如果要读取多个配置文件中的信息, properties 配置文件中会有很多的容易信息, 比如

 SpringBoot(项目创建使用+配置文件+日志文件)

 要想解决这个问题, 就可以使用 yml 配置文件的格式化了


6. yml 配置文件说明

yml 意思是”另一种标记语言”, yml 是一个可读性高, 易于理解,用来表达数据序列化的格式. 特别适合用来表达或编辑数据结构, 各种配置文件等. yml 最大优势是可以跨语言, 比如 golang java python 都可以使用 yml 作为配置文件

(1) yml 基本语法

yml 是树形结构的配置文件, 基础语法是 “key: value”,  注意 中间使用冒号和空格连接的,空格不要省略

SpringBoot(项目创建使用+配置文件+日志文件)

(2) yml 配置不同的数据类型

# 字符串
string.value: hello

# 布尔值
boolean.value: true

# 整数
int.value: 10

# 浮点数
float.value: 3.14159

# Null, ~ 表示 null
null.value: ~

(3) yml 单双引号的问题

SpringBoot(项目创建使用+配置文件+日志文件)

(4) 配置对象

在 yml 中配置对象, 这个时候需要使用注解 @ConfigurationProperties 来读取

SpringBoot(项目创建使用+配置文件+日志文件)

 SpringBoot(项目创建使用+配置文件+日志文件)

(5)配置集合

配置文件也可以配置 list 集合

SpringBoot(项目创建使用+配置文件+日志文件)


7. properties 和 yml 的区别

  • properties 是以 key=value 的形式配置的键值类型的配置文件, 而 yml 使用的是类似于 json 格式的配置方式, key: value 中间用冒号和空格连接
  • properties 是早期并且也是默认的配置文件格式, 这种方式存在一定的冗余数据, yml 可以很好的解决这种冗余问题
  • yml 通用性更好,支持更多语言, 并且支持更多的数据类型

8. SpringBoot 日志文件

8.1 日志的作用

日志是程序的重要组成部分,当程序报错是就可以通过,日志来发现和定位问题,并且日志的作用还有

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

Spring Boot 项目在启动的时候就有默认的日志输出

如果这个默认的日志输出,就可以发现问题

  • Spring Boot 内置了日志框架
  • 默认情况下, 输出的日志并非是开发者定义和打印的, 那么开发者如何在程序中自定义打印日志
  • 日志默认是打印在控制台上的, 但这样是不能被保存的, 那么怎样把日志持久化保存下来

8.2 自定义日志打印

自定义打印日志的实现步骤:

  1. 在程序中得到日志对象
  2. 使用日志对象的相关语法输出要打印的内容

SpringBoot(项目创建使用+配置文件+日志文件)

SpringBoot(项目创建使用+配置文件+日志文件)

 可以看到这里日志打印只出现了三个, 这是因为默认的日志级别是 info 的, 这里只会输出级别大于等于 info 的

SpringBoot(项目创建使用+配置文件+日志文件)

package com.example.demo;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @Description:
 * @Date 2022/12/27 14:04
 */
@Controller
@ResponseBody
public class UserController2 {

    // 1.先得到日志对象 (设置当前类的类型)
    private final static Logger log = LoggerFactory.getLogger(UserController2.class);

    @RequestMapping("/sayhii")
    public void sayHii() {
        // 2.使用日志对象提供的方法进行打印
        log.trace("trace 最小");
        log.debug("debug 调试");
        log.info("info 普通");
        log.warn("warn 警告");
        log.error("error 错误");
    }
}

8.3 日志的级别

日志级别可以帮助筛选出重要的信息

  1. trace: 微量, 少许, 级别最低
  2. debug: 调试日志
  3. info: 普通信息日志
  4. warn: 警告日志
  5. error: 错误日志
  6. fatal: 致命的日志, 系统输出的, 不能自定义打印

当存在局部日志级别和全局日志级别设置时, 那么当访问局部日志时, 使用的是局部日志级别, 

局部日志级别优先级 > 全局的日志级别 

# 设置全局的日志级别 (properties)
logging.level.root=info
# 设置局部文件夹的日志级别
logging.level.com.example.demo.controller=trace
# 全局日志级别的配置  yml
logging:
  level: 
    root: error

8.4 日志持久化

日志持久化: 将日志永久的保存到磁盘的某个位置, 有两种方式

  1. 在配置文件中设置日志的保存路径, 当设置了保存路径之后, 那么日志就会自动的进行持久化
  2. 在配置文件中设置日志保存的名称, 日志会自动进行持久化

(1) 设置日志的保存路径

# 设置日志的保存目录 (properties)
logging.file.path=D:/IDEA/

# 如果想使用 \ 就要注意转义的问题,这里用\\
logging.file.path=D:\\IDEA\\
# 设置日志保存的目录  (yml)
logging:
  file:
    path: D:/IDEA/

可以看到日志保存到了这个目录下的位置 

SpringBoot(项目创建使用+配置文件+日志文件)

 (2) 设置日志的保存名称

# 设置日志的保存名称 (properties)
logging.file.name=D:/IDEA/spring-boot.log

8.5 更简单的实现日志打印lombok

添加 lombok 到当前项目

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.20</version>
    <optional>true</optional>
</dependency>

(1) 使用 @Slf4j 得到日志对象 log

(2) 使用 log 对象自定义打印日志

package com.example.demo.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

//@RestController = @Controller + @ResponseBody
@RestController
@Slf4j   // 代替了之前需要通过 LoggerFactory.getLogger 操作
public class UserService {

    @RequestMapping("/sayhi2")
    public void sayHi2() {
        log.trace("trace");
        log.debug("debug");
        log.info("info");
        log.warn("warn");
        log.error("error");
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/87289.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!