首页 > 其他分享 >Spring Book 配置文件 / 日志

Spring Book 配置文件 / 日志

时间:2025-01-15 13:00:22浏览次数:3  
标签:properties 配置文件 Spring 配置 public Book 日志 yml

目录

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=false
  spring.datasource.username=root
  spring.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=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
  # 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件
  mapper-locations: classpath:mybatis/**Mapper.xml
  # 配置打印 MyBatis日志
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-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: lisi
  id: 18
  age: 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 {
    @Autowired
    private 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,如下所⽰:
  #  配置Map
  map:
    k1: kk1
    k2: kk2
    k3: 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: 1KB
 file-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 个级别, ⽇志级别越⾼,收到的⽇志信息也就越少,我们可以通过配置⽇志的保存名称 或保存⽬录来将⽇志持久化

标签:properties,配置文件,Spring,配置,public,Book,日志,yml
From: https://blog.csdn.net/2401_83177222/article/details/145152102

相关文章

  • 【原创】thinkbook16+2023锐龙7840h版本笔记本C口充电需要重新插拔才起作用的问题自己
    这个笔记本左边有两个c口都可以充电有一个是usb4,pd100w。现在出现一个问题需要插两次才能申请到pd协议。看了主板,也没有办法直接给他dc20v的电压输入。怀念以前的笔记本都是dc供电,简单耐用。两个c口试过都是一样的,应该是主板电路上的问题吧,如果维修肯定要返厂,浪费时间精力。如......
  • springboot社区医院管理信息系统-计算机毕业设计源码23303
     摘 要本文旨在探讨基于SpringBoot框架的社区医院管理信息系统的设计与实现。随着信息技术的快速发展,医院管理信息化已成为提升医疗服务水平、优化医疗资源配置的重要手段。社区医院作为基层医疗服务的重要组成部分,其信息化建设的推进对于提高基层医疗服务质量和效率具有重......
  • springboot人力资源管理系统-计算机毕业设计源码28241
    摘要人力资源管理对于企业的发展和成功至关重要。随着企业规模的扩大和组织结构的复杂化,传统的人力资源管理方法已经无法满足日益增长的需求。因此,许多企业开始采用信息化系统来支持人力资源管理流程,提高效率、准确性和数据可靠性。本研究旨在基于SpringBoot开发一款全功能的......
  • springboot空巢老人健康管理系统-计算机毕业设计源码29889
    摘 要随着社会老龄化程度不断加剧,空巢老人群体的健康管理问题日益引起人们的关注。为了更好地满足空巢老人群体的健康管理需求,本研究致力于设计并实现一款基于SpringBoot框架的空巢老人健康管理系统。该系统旨在为管理员用户、老人用户和医生用户提供全方位的健康管理服务,......
  • SpringBoot高校科研信息管理系统-计算机毕业设计源码34040
    摘要随着科研活动的不断扩展和深化,高校科研信息管理面临诸多挑战,包括信息碎片化、数据管理混乱、科研成果共享不畅等问题。为了解决这些问题,开发高校科研信息管理系统具有重要意义。该系统旨在整合高校科研信息资源,提供便捷的科研信息管理平台,促进科研成果的共享和交流,推动高......
  • springboot图书管理系统-计算机毕业设计源码39050
    摘 要21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。该系统采用了先进的图书管理理......
  • Java个人驾校预约管理系统web驾校教练预约系统springboot/ssm代码编写
    Java个人驾校预约管理系统web驾校教练预约系统springboot/ssm代码编写基于springboot(可改ssm)+html+vue项目开发语言:Java框架:springboot/可改ssm+vueJDK版本:JDK1.8(或11)服务器:tomcat数据库:mysql5.7(或8.0)数据库工具:Navicat/sqlyog开发软件:eclipse/idea依赖管理......
  • 基于SpringBoot + Vue的百货中心管理系统
    文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言......
  • 基于SpringBoot + Vue的宿舍报修系统(角色:学生、维修人员、管理员)
    文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言......
  • SpringCloud 配置动态更新原理深度解析
    引言在现代微服务架构中,服务数量庞大、功能复杂、配置参数众多。如何有效管理和动态更新配置成为微服务开发中的一个重要挑战。SpringCloudConfig作为一种分布式配置管理解决方案,能够集中存储和管理配置文件,同时支持配置的动态更新。这种动态更新机制极大地减少了因配置变......