• SpringBoot配置文件和日志


    目录

    SpringBoot配置文件

    SpringBoot配置文件的作用 

    项目中的重要数据写在配置文件当中

    降低代码耦合 

    SpringBoot配置文件的格式 

    properties配置文件

    读取配置文件中的内容(@Value注解使用${}格式读取)

    properties优缺点 

    yml配置文件 

    yml特点:

    yml语法 

    yml对于单双引号的问题 

    yml配置对象多行写法 

    yml 配置文件单行写法

    获取对象:

    ①在yml配置文件中存放一个对象 

    ②新建一个实体类(与该对象保存一致)并注入到Spring容器 

    ③从配置文件中获取该对象 

    ④通过属性注入获取对象 

    yml配置集合 

    ①在yml中存放一个集合

    ②注入集合

    ③获取bean对象 

    properties和yml有什么区别(重要) 

    SpringBoot日志 

    日志的作用: 

    如何使用日志: 

    日志的级别 (由低到高):

    日志的级别设置:

    日志的持久化: 

    ①配置日志的保存路径 

    ②配置日志的文件名字

    ③更加简易的添加日志的方式:添加lombok

    lombok常用注解:


    SpringBoot配置文件

    SpringBoot配置文件的作用 

    项目中的重要数据写在配置文件当中

    如:数据库的连接信息,项目的启动端口,第三方系统的日志信息等等,如果没有我们的配置文件,数据库就不能连接。

    降低代码耦合 

    在使用servlet的时候,包括使用JDBC编程的时候,数据库的连接信息都是写在java代码中的,在SpringBoot框架中则要写到配置文件中。

    写到配置文件中就可以降低代码的耦合程度。 

    配置文件中的内容便于开发者进行修改,如果写在java文件中,那么编译后的.class文件就是只可以读的,不能进行修改。而且写到配置文件中也便于开发者可以在配置文件中看到项目部署的端口号,数据库连接情况等等。

    SpringBoot配置文件的格式 

    一般是两种格式;

    properties(默认)

    yml(yaml)

    如果这两个格式的配置文件都有的时候(不建议出现两种),优先以properties格式的为主,这也是SpringBoot约定大于配置的一个体现。

    注意:两种格式,都得以application.properties和application.yml命名,因为SpringBoot启动的时候只读取application命名的配置文件。 

    properties配置文件

    键值对Key=Value的方式 

    可以使用系统的配置,也可以自定义 

    读取配置文件中的内容(@Value注解使用${}格式读取)

    使用@Value注解来读取配置文件的内容,使用${}获取到配置文件中内容的赋值。

    1. package com.example.demo.Controller;
    2. import org.springframework.beans.factory.annotation.Value;
    3. import org.springframework.stereotype.Controller;
    4. import org.springframework.web.bind.annotation.RequestMapping;
    5. import org.springframework.web.bind.annotation.ResponseBody;
    6. @Controller
    7. @ResponseBody
    8. @RequestMapping("/user")
    9. public class UserController {
    10. @Value("username")
    11. private String name;
    12. @RequestMapping("/sayHi")
    13. public String sayHi(){
    14. return "Hi "+ name;
    15. }
    16. }

    如果不加${}相当于@Value中的字符串赋值给了name。 

    如果要获得赋值的配置文件则需要使用${}来获取。

    1. package com.example.demo.Controller;
    2. import org.springframework.beans.factory.annotation.Value;
    3. import org.springframework.stereotype.Controller;
    4. import org.springframework.web.bind.annotation.RequestMapping;
    5. import org.springframework.web.bind.annotation.ResponseBody;
    6. @Controller
    7. @ResponseBody
    8. @RequestMapping("/user")
    9. public class UserController {
    10. @Value("${studentname}")
    11. private String name;
    12. @RequestMapping("/sayHi")
    13. public String sayHi(){
    14. return "Hi "+ name;
    15. }
    16. }

    properties优缺点 

    优点:

    1.是系统默认的配置文件

    2.优先级比yml高

    3.格式简单

    缺点:写法比较冗余(包名必须全都写上,很多相同包名下的配置都要写上包名)

    yml配置文件 

    yml是yaml的缩写,在使用配置文件时使用yml和yaml都可以,推荐使用yml。

    yml可读性高,写法简单,易于理解,语法和JSON相似 

    yml特点:

      1、写法简单、可读性高;

       2、支持更多的数据类型

       3、支持跨语言的使用(最大优势)

    yml语法 

    yml也是按照key:value的方式存储的,但是它的写法比properties更简洁。

    tab和空格不能少,否则容器无法识别 

    1. package com.example.demo.Controller;
    2. import org.springframework.beans.factory.annotation.Value;
    3. import org.springframework.web.bind.annotation.RequestMapping;
    4. import org.springframework.web.bind.annotation.RestController;
    5. @RestController//==@Controller+@ResponseBody
    6. public class StudentController {
    7. @Value("${server.bbbb}")
    8. private String name;
    9. @RequestMapping("/sayhi")
    10. public String sayHi(){
    11. return "Hi "+name;
    12. }
    13. }

    yml对于单双引号的问题 

    前两种:

    加双引号;

    在网页中\n转义字符不好看出来。

    yml配置对象多行写法 

    1. #对象多行写法
    2. student :
    3. id : 1
    4. name : 张三
    5. age : 18

    yml 配置文件单行写法

    1. #对象单行写法
    2. student2 : {id : 2, name : 李四, age : 19}

    获取对象:

    ①在yml配置文件中存放一个对象 

     

    ②新建一个实体类(与该对象保存一致)并注入到Spring容器 

    1. package com.example.demo;
    2. import lombok.Data;
    3. import org.springframework.stereotype.Component;
    4. @Data
    5. @Component
    6. public class Student {
    7. private int id;
    8. private String name;
    9. private int age;
    10. }

    ③从配置文件中获取该对象 

    ④通过属性注入获取对象 

    1. package com.example.demo.controller;
    2. import com.example.demo.Student;
    3. import org.springframework.beans.factory.annotation.Autowired;
    4. import org.springframework.stereotype.Controller;
    5. @Controller
    6. public class StudentController {
    7. @Autowired
    8. private Student student;
    9. public Student getStudent(){
    10. return student;
    11. }
    12. }

    yml配置集合 

    1. #集合
    2. #myName对应于实体类
    3. #name是集合
    4. myName : { name : [ 张三, 李四, 王五 ] }

    ①在yml中存放一个集合

      

    ②注入集合

    ③获取bean对象 

    1. package com.example.demo.controller;
    2. import com.example.demo.MyNameController;
    3. import org.springframework.beans.factory.annotation.Autowired;
    4. import org.springframework.stereotype.Controller;
    5. import org.springframework.web.bind.annotation.RequestMapping;
    6. import org.springframework.web.bind.annotation.ResponseBody;
    7. @Controller
    8. @RequestMapping("/hello")
    9. public class ListController {
    10. @Autowired
    11. private MyNameController myNameController;
    12. @RequestMapping("/hi")
    13. @ResponseBody
    14. public String getNames(){
    15. return myNameController.getName()+"";
    16. }
    17. }

    properties和yml有什么区别(重要) 

    区别1:properties仅仅支持Java项目,但是yml支持包括Java在内的多种语言(例如python);

    区别2:properties的key写起来比较冗余,不像yml那样简易。(yml支持层级,层级之间采用缩进的方式)

    区别3:yml支持更多的数据类型(string,object,list)

    SpringBoot日志 

    日志的作用: 

    1、发现和定位问题,报错了不查看日志,难以发现和定位问题

    2、记录用户的登录日志,方便分析用户的登录状态,是恶意还是正常

    3、记录系统的操作情况,定位操作人,操作时间和操作行为等等 

    4、记录程序的执行时间,方便后续的优化等等.... 

    如何使用日志: 

    SpringBoot内置了日志框架,所以会有默认的日志。 

      

    使用日志,首先我们要找到日志的门面SLF4J ,然后根据SLF4J获取到日志对象,再进行使用。

    1. package com.example.demo.controller;
    2. import org.slf4j.Logger;
    3. import org.slf4j.LoggerFactory;
    4. import org.springframework.web.bind.annotation.RequestMapping;
    5. import org.springframework.web.bind.annotation.RestController;
    6. @RestController
    7. @RequestMapping("/hello")
    8. public class UserController {
    9. //通过slf4j获取日志对象
    10. private static Logger logger= LoggerFactory.getLogger(UserController.class);
    11. //输出日志
    12. @RequestMapping("/hi")
    13. public void sayhi(){
    14. logger.info("hi i'm info");
    15. logger.debug("hi i'm debug");
    16. logger.error("hi i'm error");
    17. logger.warn("hi i'm warn");
    18. }
    19. }

    日志的级别 (由低到高):

    trace
          少许的日志,这一个是最低的级别。

    debug
            这个级别用于"调试"的级别

    info
           这个级别是普通的日志信息。(如果不指定日志的级别,那么默认就是这个)

    warn
           警告日志:有一些地方存在警告的风险的,就需要使用到这个warn级别的日志

    error
           错误级别的日志,如果发生了一些错误,那么就需要使用这个级别来记录。

    fatal
           发生了比较致命的情况,需要由系统来进行输出,不可以由用户手动进行debug输出。
     

     默认的级别是info,所以一般情况下只会出现info及其以上的日志,较为低级的日志一般不会出现。

    日志的级别设置:

    日志的默认级别是info,所以info以上的日志一般不会出现,但是这个默认的级别是可以通过配置文件进行修改的。(注意:fatal是由系统输出的,不能我们手动进行debug输出)

    当我们修改默认级别为error的时候,控制台就基本没有日志

    上述是全局日志的设定,当然也有局部日志的设定,但是局部日志的设定要服从全局 

    日志的持久化: 

    日志的持久化,说白了就是把日志存在本地的磁盘 

    ①配置日志的保存路径 

    这里的路径中要用“/” ,因为“/”会被认为是特殊符号

     目标目录下就会有个日志文件:

    ②配置日志的文件名字

     

    ③更加简易的添加日志的方式:添加lombok

    1、安装一个EditStarters插件:

    2、添加@Slf4j注解

    那么为什么@Slf4j就可以生成一个log对象呢?这个主要是因为在编译时期@Slf4j会为当前类当中设置一个静态从常量属性,这一个属性就是log。

    我们可以看看UserController的字节码文件:

    lombok常用注解:

    ⽇志注解

    注解作⽤
    @Slf4j添加⼀个名为 log 的⽇志,使⽤ slf4j

    基本注解

    注解作用
    @Getter⾃动添加 getter ⽅法
    @Setter⾃动添加 setter ⽅法
    @ToString⾃动添加 toString ⽅法
    @EqualsAndHashCode⾃动添加 equals 和 hashCode ⽅法
    @NoArgsConstructor⾃动添加⽆参构造⽅法
    @AllArgsConstructor⾃动添加全属性构造⽅法,顺序按照属性的定义顺序
    @NonNull属性不能为 null
    @RequiredArgsConstructor⾃动添加必需属性的构造⽅法,final + @NonNull 的
    属性为必需

    组合注解:

    注解作用
    @Data@Getter + @Setter + @ToString +
    @EqualsAndHashCode +
    @RequiredArgsConstructor +
    @NoArgsConstructor

    注解的原理,就是在编译时期添加对应的方法 

  • 相关阅读:
    vue video播放m3u8源
    【Jenkins高级操作,欢迎阅读】
    MBR30300VCT-ASEMI肖特基二极管有什么用
    C语言——递归题
    后端私钥加密,前端使用wxapp_rsa.js用公钥解密
    【JavaWeb】Servlet系列——使用纯Servlet做一个单表的CRUD操作(实际操作实现篇)
    CentOS7通过yum安装RabbitMQ3.9.10
    Python每日一练 04
    原址删除有序数组重复整数
    火爆全网,Python+Pytest+Allure+Jenkins接口自动化框架(步骤+源码)
  • 原文地址:https://blog.csdn.net/m0_67995737/article/details/130630125