SpringBoot配置文件和日志

news2024/9/21 18:46:00

目录

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注解来读取配置文件的内容,使用${}获取到配置文件中内容的赋值。

package com.example.demo.Controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@ResponseBody
@RequestMapping("/user")
public class UserController {
    @Value("username")
    private String name;
    @RequestMapping("/sayHi")
    public String sayHi(){
        return "Hi "+ name;
    }
}

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

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

package com.example.demo.Controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@ResponseBody
@RequestMapping("/user")
public class UserController {
    @Value("${studentname}")
    private String name;
    @RequestMapping("/sayHi")
    public String sayHi(){
        return "Hi "+ name;
    }
}

properties优缺点 

优点:

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

2.优先级比yml高

3.格式简单

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

yml配置文件 

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

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

yml特点:

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

   2、支持更多的数据类型

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

yml语法 

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

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

package com.example.demo.Controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController//==@Controller+@ResponseBody
public class StudentController {
    @Value("${server.bbbb}")
    private String name;
    @RequestMapping("/sayhi")
    public String sayHi(){
        return "Hi "+name;
    }

}

yml对于单双引号的问题 

前两种:

加双引号;

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

yml配置对象多行写法 

#对象多行写法
student :
  id : 1
  name : 张三
  age : 18

yml 配置文件单行写法

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

获取对象:

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

 

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

package com.example.demo;

import lombok.Data;
import org.springframework.stereotype.Component;

@Data
@Component
public class Student {
    private int id;
    private String name;
    private int age;
}

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

④通过属性注入获取对象 

package com.example.demo.controller;

import com.example.demo.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

@Controller
public class StudentController {
    @Autowired
    private Student student;
    
    public Student getStudent(){
        return student;
    }
}

yml配置集合 

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

①在yml中存放一个集合

  

②注入集合

③获取bean对象 

package com.example.demo.controller;

import com.example.demo.MyNameController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/hello")
public class ListController {
    @Autowired
    private MyNameController myNameController;


@RequestMapping("/hi")
@ResponseBody
    public String getNames(){
        return myNameController.getName()+"";
    }
}

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获取到日志对象,再进行使用。

package com.example.demo.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/hello")
public class UserController {
    //通过slf4j获取日志对象
    private static Logger logger= LoggerFactory.getLogger(UserController.class);
    //输出日志
    @RequestMapping("/hi")
    public void sayhi(){
        logger.info("hi i'm info");
        logger.debug("hi i'm debug");
        logger.error("hi i'm error");
        logger.warn("hi i'm warn");
    }
}

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/547678.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT官方APP正式发布!附安装使用教程

目录 前言 APP功能演示 1.与机器人聊天,询问问题 2.语音输入,人机交互 3.聊天历史,新建聊天分组 安装教程 1.下载应用 2.登录账号 3.愉快的玩耍吧 总结 写到最后 大家好,我是大侠,AI领域的专业博主 前言 …

Docker安装常用软件-Kafka集群

零、为了方便开发调试,使用kafka部署一套kafka环境,进行功能调试,方便快捷 一、部署zookeeper 1、下载镜像 docker pull wurstmeister/zookeeper 2、运行zookeeper镜像 docker run -d --restartalways --log-driver json-file --log-op…

(转载)从0开始学matlab(第10天)—自顶向下的编程思想

在前面的内容中,我们开发了几个完全运转的 MATLAB 程序。但是这些程序都十分简单,包括一系列的 MATLAB 语句,这些语句按照固定的顺序一个接一个的执行。像这样的程序我们称之顺序结构程序。它首先读取输入,然后运算得到所需结果&a…

QT学习记录(三)绘图

按照下面两个教程学习 QT学习教程(全面)_Strive--顾的博客-CSDN博客_qt学习 天山老妖S的博客_QT开发(3)_51CTO博客 1、绘图 VC项目右键增加QT GUI Class,在QT Designer中编辑DlgDraw.ui 在DlgDraw中重载函数 void DlgDraw::paintEvent(Q…

Flutter控件之图片Image封装

Flutter控件之基类Widget封装 Flutter控件之文本Text封装 为什么要进行繁琐的封装?直接用也挺好啊,这个回答一点毛病没有,大部分视图都可以原生绘制,可在Flutter中偏偏原生的控件,少了很多需要又常用的属性&#xff…

最小生成树—Kruskal算法和Prim算法

1.最小生成树 连通图:在无向图中,若从顶点v1到顶点v2有路径,则称顶点v1与顶点v2是连通的。如果图中任 意一对顶点都是连通的,则称此图为连通图。 生成树:一个连通图的最小连通子图称作该图的生成树。有n个顶点的连通…

Java基础-面向对象总结(3)

本篇文章主要讲解Java面向对象的知识点 面向对象的三大特性类的扩展(抽象类,接口,内部类,枚举) 目录 面向对象和面向过程的区别? 面向对象的五大基本原则 面向对象三大特性 继承 怎么理解继承 ? 继承和聚合的区别? 封装 多态 什么是多态 什么是运行时多…

面试阿里、字节全都一面挂,被面试官说我的水平还不如应届生

测试员可以先在大厂镀金,以后去中小厂毫无压力,基本不会被卡,事实果真如此吗?但是在我身上却是给了我很大一巴掌... 所谓大厂镀金只是不卡简历而已,如果面试答得稀烂,人家根本不会要你。况且要不是大厂出来…

MySQL数据库基础4-内置函数

文章目录 日期函数字符串函数数学函数其他函数 日期函数 函数名称描述current date()当前日期current time()当前时间current timestamp()当前时间戳date(datetime)返回datetime参数的日期部分date add(date, interval d_value type)在date中添加日期或时间,interv…

GitHub Actions Error “Waiting for a runner to pick up this job”

GitHub Actions Error “Waiting for a runner to pick up this job” 什么是GitHub Actions GitHub Actions 是一个 CI/CD(持续集成和持续部署)平台,可以让您自动化工作流程并与 GitHub 存储库中的代码集成。使用 GitHub Actions&#xff…

智能排班系统 【数据库设计】

文章目录 数据库设计规范ER图物理模型数据表登录日志表操作日志表菜单表角色表企业表门店表省市区表门店节日表消息表职位表排班规则表排班任务表排班结果存储scheduling_date排班日表scheduling_shift排班班次表shift_user班次员工中间表 定时通知表用户表中间表role_menu角色…

适合小白的网络安全书籍推荐

学习的方法有很多种,看书就是一种不错的方法,但为什么总有人说:“看书是学不会技术的”。 其实就是书籍没选对,看的书不好,你学不下去是很正常的。 一本好书其实不亚于一套好的视频教程,尤其是经典的好书…

MATLAB系列(2)——plot画图函数

一、plot plot画的是折线图。plot可以画出多种线类型的图,比如实线、虚线、星线、圆圈线等,一个图里可以画多条折线,方便对比。 1.1 设置坐标轴标签 和 图名 使用xlabel 和ylabel,title设置图名,fontsize设置名字字体大小 1.2 …

Netty核心技术三--NIO编程

1. JAVA NIO基本介绍 Java NIO 全称 java non-blocking IO,是指 JDK 提供的新API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 New IO),是同步非阻塞的 NIO 相关类都被放在 java.nio 包及子包下&…

【软件测试基础】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 1、什么是软件测试(CASE) 1.1 软件测试就是验…

亲测解决:项目无法编译/打包,提示找不到符号的问题

我在对服务进行打包的过程中遇到了“Error…找不到符号”的问题,但是我的项目是能够正常启动的,为什么会出现这个问题呢? 有的博主说是因为我没有正常打包,然后我又学习了一遍如何对项目进行打包…但是然并卵(然而并没…

【Java数据结构】——第十节(下).选择排序与堆排序

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:Java初阶数据结构 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!! 文章目…

一文3000字从0到1手把手教你基于PostMan的接口自动化测试

临近下半年,公司任务也不是很多,趁这个机会老大让我研究了一下PostMan的脚本自动化测试。作为一个前端开发,说实话,对于PostMan的操作,仅仅限于新建请求->填写url地址和参数->send发送,然后看看返回值…

智能排班系统 【开源说明】

文章目录 引言说明讲讲开源开源要做什么了解开源协议项目的信息脱敏写好项目说明文档修改.gitignore 项目不完善点说明管理系统前端页面自适应做得不好部分页面体验不好 管理系统后端接口缺乏数据校验数据管理接口查询不够完善接口可以更加完善 开源仓库地址其他文章引用说明前…

【我的创作纪念日】—— 纪念四年的坚持

这是一篇和技术无关的博客,但对我而言,它承载了不菲的价值 普通且宁静的一天,被一条消息戳中,于是,写一篇分享帖,纪念我这 1460 天的坚持初衷: 前言:对过去的回顾 4 年前的我&#…