欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > Spring Book 配置文件 / 日志

Spring Book 配置文件 / 日志

2025/1/19 0:56:14 来源:https://blog.csdn.net/2401_83177222/article/details/145152102  浏览:    关键词:Spring Book 配置文件 / 日志

目录

Spring Book 配置文件

一. 配置文件

1.配置文件的作用

2.配置文件的格式

二.  .properties配置文件

1. .properties配置文件说明

2.读取配置文件

三.yml配置文件

1. .yml配置文件说明

2.使⽤ yml 连接数据库 

3.yml 配置不同数据类型及 null 

4.yml配置读取

5.主要事项:value值加单双引号

6.配置对象 

7.配置集合

8.配置Map

四.配置文件总结:

1.配置的转换:

2.单双引号的区别

3.对应关系:

4.yml优缺点:

 Spring Book 日志

一.日志的作用

二.日志的使用

1.使用日志对象打印日志

2.日志框架

2.1⻔⾯模式(外观模式)

3. SLF4J框架

3.1日志的级别:

3.2日志级别的使用:

3.3配置⽇志级别

3.4配置日志文件名

3.5配置日志的存储目录

3.6配置⽇志⽂件分割

三.更简单的日志输出

添加 lombok 依赖

输出⽇志

总结:


Spring Book 配置文件

一. 配置文件

1.配置文件的作用

        配置文件主要为了解决硬编码带来的问题,把可能会发生改变的信息,放在一个集中的地方,当我们启动某个程序时,应用程序从配置文件中读取数据,并加载运行。

        使用配置文件,可以使程序完成用户和应用程序的交互,或者应用程序与其他程序的交互

2.配置文件的格式

        Spring Book配置文件共有三种:

  •      application.properties
  •      application.yml
  •      application.yaml

当应⽤程序启动时, Spring Boot会⾃动从classpath路径找到并加载application.properties application.yaml 或者 application.yml ⽂件 

说明:

  1.        .properties文件和.yml文件是可以共存在同一个项目中的,当配置文件内容有冲突时,则以 .properties文件为主, .properties文件优先级更高
  2.       虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取⼀种 统⼀的配置⽂件格式,这样可以更好的维护(降低故障率)

二.  .properties配置文件

1. .properties配置文件说明

        .properties是创建Spring Book项目 默认的配置文件

  # 配置项⽬端⼝号server.port=8080#配置数据库连接信息spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=falsespring.datasource.username=rootspring.datasource.password=123456

配置文件使用 "#" 来添加注解信息 

2.读取配置文件

如果在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤ @Value 注解来实现。
@Value 注解使⽤(" ${}  ")的格式读取,如下代码所⽰:
配置如下:
myKey = bb
myKey.key1 = aa
@RestController
public class PropertiesController {
//使用value("${}") 从配置文件中获取自定义信息 赋值给变量key1@Value("${mykey.key1}")private String key1;@Value("${mykey}")private String key;@RequestMapping("/key1")public String key1(){return "读取到值:"+key1;}@RequestMapping("/key")public String key(){return "读取到值:"+key;}
}

三.yml配置文件

1. .yml配置文件说明

yml 是树形结构的配置⽂件,它的基础语法是"key: value".
key 和 value 之间使⽤英⽂冒号加空格的⽅式组成, 空格不可省略
基础语法如下:
//正确的代码格式
myKey: bb
myKey.key1: aa//错误的代码格式
mykey:a

2.使⽤ yml 连接数据库 

#数据库连接配置
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=falseusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Drivermybatis:# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件mapper-locations: classpath:mybatis/**Mapper.xml# 配置打印 MyBatis日志configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: true #配置驼峰⾃动转换

3.yml 配置不同数据类型及 null 

# 字符串
string.value: Hello# 布尔值,true或false
boolean.value: true
boolean.value1: false# 整数
int.value: 10# 浮点数
float.value: 3.14159# Null,~代表null
null.value: ~# "" 空字符串
#, 直接后⾯什么都不加就可以了, 但这种⽅式不直观, 更多的表⽰是使⽤引号括起来
empty.value: ''

4.yml配置读取

yml 读取配置的⽅式和 properties 相同,使⽤ @Value 注解即可,实现代码如下:
yml配置:
string:hello: n
@RestController
public class Controller {@Value("${string.hello}")private String hello;@RequestMapping("/hello")public String Hello(){return "获取yml配置:"+hello;}}

5.主要事项:value值加单双引号

字符串默认不⽤加上单引号或者双引号,如果加英⽂的单双引号可以表⽰特殊的含义。
尝试在 application.yml 中配置如下信息:
string:str1: Hello \n Spring Boot.str2: 'Hello \n Spring Boot.'str3: "Hello \n Spring Boot."
@RestController
public class Controller {@Value("${string.str2}")private String str2;@Value("${string.str3}")private String str3;@RequestMapping("/yml")public String readYml(){System.out.println(str1);System.out.println(str2);System.out.println(str3);return "yml";}
}
//执行结果:
//  Hello \n SpringBoot.
//  Hello \n SpringBoot.
//  Hello
//      SpringBoot.
从上述结果可以看出:
  • 字符串默认不⽤加上单引号或者双引号。
  • 单引号会转义特殊字符,使其失去特殊功能, 始终是⼀个普通的字符串.
  • 双引号不会转义字符串⾥⾯的特殊字符, 特殊字符会表⽰本⾝的含义.
     此处的转义理解起来会有些拗⼝, \n 本意表⽰的是换⾏
     使⽤单引号会转义, 就是说, \n 不再表⽰换⾏了, ⽽是表⽰⼀个普通的字符串
     使⽤双引号不会转义, 表⽰ \n 表⽰的是它本⾝的含义, 就是换⾏

6.配置对象 

.yml中配置对象,如下格式:

#  配置对象
student:name: lisiid: 18age: 20

注意" : "后面加空格 

这个时候就不能⽤ @Value 来读取配置中的对象了,此时要使⽤另⼀个注解

@ConfigurationProperties 来读取,具体实现如下:

package com.example.springiocdemo.entity;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;@ConfigurationProperties("student")
@Component
@Data
public class Student {private String name;private Integer id;private Integer age;}

调用类如下:

@RequestMapping("yml")
@RestController
public class Readymlcontroller {@Autowiredprivate Student student;@RequestMapping("readStudent")public String readStudent(){return "从yml中获取配置文件Student:"+student;}
}

7.配置集合

      配置list集合,如下所⽰:

dbtypes:name:- mysql- sqlserver- db2

集合的读取和对象一样,使用@ConfigurationProperties 来读取的

@Component
@ConfigurationProperties(prefix = "dbtypes")
@Data
public class ListConfig {private List<String> name;
}

8.配置Map

以配置 map,如下所⽰:
  #  配置Mapmap:k1: kk1k2: kk2k3: kk3

map的读取和对象一样,使用@ConfigurationProperties 来读取的

@Component
@ConfigurationProperties(prefix = "maptypes")
@Data
public class MapConfig {private HashMap<String,String> map;
}

四.配置文件总结:

1.配置的转换:

2.单双引号的区别

3.对应关系:

4.yml优缺点:

 优点:

  1. 可读性高,写法简单,易于理解
  2. 支持更多的数据类型,可以简单表达对象,数组,list,Map,的数据形态
  3. 支持更多的编程语言,不只是java中可以使用,在Golang,Python,JavaScript也可以使用

缺点:

  1. 不适合写复杂的配置⽂件
  2. 对格式有较强的要求(可能一个空格导致整个项目垮掉) 

 Spring Book 日志

一.日志的作用

 ⽇志主要是为了发现问题, 分析问题, 定位问题的, 但除此之外, ⽇志还有很多⽤途:
  1. 系统监控
  2. 数据采集
  3. 日志审计

二.日志的使用

Spring Book项目 在启动的时候默认就有日志输出,如图所示:

System.out.print 打印的⽇志, ⽐ SpringBoot 打印的⽇志缺少了很多信息.
SpringBoot 内置了⽇志框架 Slf4j , 我们可以直接在程序中调⽤ Slf4j 来输出⽇志

1.使用日志对象打印日志

⽇志对象的打印⽅法有很多种,我们可以先使⽤ info() ⽅法来输出⽇志,如下代码所⽰:
@RequestMapping("Logger")
@RestController
public class LoggerController {private static Logger logger =  LoggerFactory.getLogger(LoggerController.class);@RequestMapping("/getLogger")public String logger(){logger.info("--------------要输出⽇志的内容----------------");return "打印⽇志";}
}

打印日志结果:

2.日志框架

SLF4J不同于其他⽇志框架, 它不是⼀个真正的⽇志实现, ⽽是⼀个抽象层, 对⽇志框架制定的⼀种规范,
标准, 接⼝. 所有SLF4J并不能独⽴使⽤, 需要和具体的⽇志框架配合使⽤
2.1⻔⾯模式(外观模式)
⻔⾯模式定义
⻔⾯模式(Facade Pattern)⼜称为外观模式, 提供了⼀个统⼀的接⼝, ⽤来访问⼦系统中的⼀群接⼝.
其主要特征是定义了⼀个⾼层接⼝, 让⼦系统更容易使用:
⻔⾯模式主要包含2种⻆⾊:
外观⻆⾊(Facade): 也称⻔⾯⻆⾊,系统对外的统⼀接⼝.
⼦系统⻆⾊(SubSystem): 可以同时有⼀个或多个 SubSystem. 每个 SubSytem 都不是⼀个单独的类,
⽽是⼀个类的集合. SubSystem 并不知道 Facade 的存在, 对于 SubSystem ⽽⾔, Facade 只是另⼀个
客⼾端⽽已(即 Facade 对 SubSystem 透明)
⽐如去医院看病,可能要去挂号, ⻔诊, 化验, 取药, 让患者或患者家属觉得很复杂, 如果有提供接待⼈
员, 只让接待⼈员来处理, 就很⽅便.
门面模式的优点:
  • 减少了系统的相互依赖. 实现了客⼾端与⼦系统的耦合关系, 这使得⼦系统的变化不会影响到调⽤它 的客⼾端;
  • 提⾼了灵活性, 简化了客⼾端对⼦系统的使⽤难度, 客⼾端⽆需关⼼⼦系统的具体实现⽅式, ⽽只需 要和⻔⾯对象交互即可.
  • 提⾼了安全性. 可以灵活设定访问权限, 不在⻔⾯对象中开通⽅法, 就⽆法访问

3. SLF4J框架

        SLF4J 可以理解为是提供⽇志服务的统⼀API接⼝, 并不涉及到具体的 ⽇志逻辑实现
打印的日志分别代表什么:

从上图可以看到,⽇志输出内容元素具体如下:
  1. 时间⽇期:精确到毫秒
  2. ⽇志级别:ERROR, WARN, INFO, DEBUG 或TRACE
  3. 进程ID
  4. 线程名
  5. Logger名(通常使⽤源代码的类名)
  6. 日志内容
3.1日志的级别:

⽇志的级别从⾼到低依次为: FATAL、ERROR、WARN、INFO、DEBUG、TRACE

        FATAL: 致命信息,表⽰需要⽴即被处理的系统级错误.
        ERROR: 错误信息, 级别较⾼的错误⽇志信息, 但仍然不影响系统的继续运⾏.
        WARN: 警告信息, 不影响使⽤, 但需要注意的问题
        INFO: 普通信息, ⽤于记录应⽤程序正常运⾏时的⼀些信息, 例如系统启动完成、请求处理完成等.
        DEBUG: 调试信息, 需要调试时候的关键信息打印.
        TRACE: 追踪信息, ⽐DEBUG更细粒度的信息事件(除⾮有特殊⽤意,否则请使⽤DEBUG级别替代)
3.2日志级别的使用:
        针对这些级别, Logger 对象分别提供了对应的⽅法, 来输出⽇志
@RequestMapping("/printLog")
public String printLog() {logger.trace("================= trace ===============");logger.debug("================= debug ===============");logger.info("================= info ===============");logger.warn("================= warn ===============");logger.error("================= error ===============");return "打印不同级别的⽇志" ;
}
       
         ⽇志的输出级别默认是 info级别, 所以只会打印⼤于等于此级别的⽇志, 也就
是info, warn和error.
3.3配置⽇志级别

⽇志级别配置只需要在配置⽂件中设置"logging.level"配置项即可,如下所⽰:

logging:level:root: debug
3.4配置日志文件名
# 设置⽇志⽂件的⽂件名
logging:file:name: logger/springboot.log
3.5配置日志的存储目录
# 设置⽇志⽂件的⽬录
logging:file:path: D:/temp

注意:logging.file.name logging.file.path 两个都配置的情况下, 只⽣效其⼀, 以logging.file.name 为准.

3.6配置⽇志⽂件分割
logging:logback:rollingpolicy:max-file-size: 1KBfile-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i

三.更简单的日志输出

每次都使⽤ LoggerFactory.getLogger(xxx.class) 很繁琐, 且每个类都添加⼀遍, lombok给我们提供了 ⼀种更简单的⽅式
  1. 添加lombok框架支持
  2. 使用 @slf4j 注解输出日志

添加 lombok 依赖

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

输出⽇志

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;//引入 @Slf4j注解
@Slf4j
@RestController
public class LogController {public void log(){//lombok提供的 @Slf4j 会帮我们提供⼀个⽇志对象 log, 我们直接使⽤就可以log.info("--------------要输出⽇志的内容----------------");}
}

总结:

  1. ⽇志是程序中的重要组成部分,使⽤⽇志可以快速的发现和定位问题,Spring Boot 内容了⽇志框架,默认情况下使⽤的是 info ⽇志级别将⽇志输出到控制台的,我们可以通过 lombok 提供的 @Slf4j 注解和 log 对象快速的打印⾃定义⽇志.
  2.  ⽇志包含 6 个级别, ⽇志级别越⾼,收到的⽇志信息也就越少,我们可以通过配置⽇志的保存名称 或保存⽬录来将⽇志持久化

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com