从0学Spring Boot框架(Spring Boot配置文件与Spring Boot日志文件)

news2024/11/24 8:40:22

文章目录

  • 1. 什么是Spring Boot?
  • 2. 如何创建Spring Boot项目?
  • 3. 验证Spring Boot项目的创建
    • 3.1 补充添加依赖
    • 3.2 代码示例
  • 4. Spring Boot配置文件
    • 4.1 配置文件的作用
    • 4.2 配置文件的格式
      • 4.2.1 properties的语法
      • 4.2.2 yml的语法
      • 4.2.3 properties与yml的对比
      • 4.2.4 设置不同环境下的配置文件
    • 4.3 更多的系统配置项
  • 5. Spring Boot日志文件
    • 5.1 日志的作用
    • 5.2 自定义打印日志
    • 5.3 日志级别
    • 5.4 日志持久化

1. 什么是Spring Boot?

Spring Boot就是Spring的脚手架,目的是简化Spring程序开发的

使用Spring Boot框架的优点:

  • 可快速集成框架,使得添加jar包相当方便
  • 内置了Tomcat等Web容器
  • 可快速部署项目
  • 抛弃繁琐的xml,使用注解和配置的方式进行开发
  • 支持更多的监控指标,更直观容易的观察项目的运行情况

2. 如何创建Spring Boot项目?

需要先在idea中安装Spring Boot Helper插件

在这里插入图片描述

安装后显示这样

在这里插入图片描述

创建项目的时候选择Spring Initializr,而不是Maven

在这里插入图片描述

设置项目参数

在这里插入图片描述

注意Spring Boot的版本选择2.x,因为3.x需要jdk17以上

在这里插入图片描述

设置项目名称与项目路径

在这里插入图片描述

创建完成后,添加maven项目的支持

在这里插入图片描述

第一次创建可能需要等待一定时间

在这里插入图片描述

点击启动类,出现如下所示说明项目可以启动成功

在这里插入图片描述

删除一些不需要的文件

在这里插入图片描述

项目目录说明

在这里插入图片描述

3. 验证Spring Boot项目的创建

3.1 补充添加依赖

项目创建后,如果我们需要添加一些别依赖,可以使用两种方式:

  1. 在Maven中央仓库中找到需要添加的依赖,复制粘贴到pom.xml中
  2. 使用下面操作的方式

添加EditStarters插件

在这里插入图片描述

在pom.xml中右键,点击Generate...

在这里插入图片描述

点击Edit Starters

在这里插入图片描述

点击OK

在这里插入图片描述

选择添加需要的依赖后,点击OK即可

在这里插入图片描述

3.2 代码示例

我们在启动类的同级或者子目录下,创建一个类TestHello

在这里插入图片描述

@Controller
@ResponseBody
public class TestHello {
    @RequestMapping("/hello")
    public String hello(){
        return "hello spring boot";
    }
}

注解的作用后面在Spring MVC章节里详细讲

启动项目成功后,在浏览器输入url:http://localhost:8080/hello,会出现如下内容
在这里插入图片描述
此时说明我们的Spring Boot创建并启动成功

4. Spring Boot配置文件

4.1 配置文件的作用

数据库连接信息
项目的启动端口
第三方系统调用的密钥信息
发现与定位问题的普通文件与异常文件

4.2 配置文件的格式

  • properties,Spring Boot项目创建时默认的格式
  • yml(yaml)

这两种配置文件的格式可在一个项目中共存,推荐选择一种使用,不要共存使用

在这里插入图片描述

但是如果同时使用了两种格式的配置文件,如果两种格式的配置文件的某个配置项发生冲突,则properties格式的文件优先级更高

4.2.1 properties的语法

properties以键值的形式配置,键和值中间用 = 连接起来(key=value),配置文件中的 # 代表注释信息

# 配置系统端口
server.port=8082
# 配置数据库源
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/blog?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456

这些配置都属于系统配置项(给Spring框架用),用户还可以自定义配置项(可在程序中用)

用户自定义配置

# 自定义配置
name=张三
age=20

在程序中如何读取自定义的配置项呢?

使用 @Value(“${ xxx }”) 的方式可读取用户自定义的配置

    @Value("${name}")
    private String name;
    @Value("${age}")
    private int age;

读取的时候,自定义与系统的配置项都可以获取到

properties的优缺点

  • 优点:是系统的默认的配置文件格式,优先级更高
  • 缺点:写法比较冗余

4.2.2 yml的语法

yml是yaml的缩写,它的语法格式为 key: value,其中冒号为英文格式,并且value与冒号中间的空格不可省略

# 系统端口号
server:
  port: 8083
# 数据库源信息
spring:
  datasource:
    username: root
    password: 123456

yml支持更多的数据类型

# 字符串
str1: 你好 \n 你好
str2: '你好 \n 你好'
str3: "你好 \n 你好"

# 布尔值
flag1: true
flag2: false

# 整数
num: 10

# 浮点数
pai: 3.14

# null ~代表null
Node: ~

读取的方式与properties格式相同,使用@Value("${ xxx }")

@Component
public class TestYml {
    @Value("${str1}")
    private String str1;
    @Value("${str2}")
    private String str2;
    @Value("${str3}")
    private String str3;
    @Value("${num}")
    private int num;
    @Value("${flag1}")
    private boolean flag1;
    @Value("${flag2}")
    private boolean flag2;
    @Value("${pai}")
    private double pai;
    @Value("${node}")
    private String node;

    //该注解代表构造方法,初始化bean的时候会调用该方法
    @PostConstruct
    public void construct(){
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
        System.out.println(num);
        System.out.println(pai);
        System.out.println(flag1);
        System.out.println(flag2);
        System.out.println(node);
    }
}

打印结果:

在这里插入图片描述

从上述字符串的打印发现:

  • 字符串默认可以不用加引号
  • 加单引号,会对特殊字符进行转义,也就是特殊字符也当字符串对待了
  • 加双引号,不会对特殊字符转义,也就是特殊字符有自己的特殊含义,\n代表换行

yml配置对象

# 对象
student1:
  id: 1
  name: 张三
  age: 10
# 对象的行内表示
student2: {id: 2,name: 李四, age: 15}

读取对象使用 @ConfigurationProperties 注解

@Component
@ConfigurationProperties("student1")//这里不需要使用$
@Getter
@Setter //这里是通过set方法赋值属性的,提供set方法
@ToString
public class Student {
    //字段与yml里的名称相同
    private int id;
    private String name;
    private int age;
}

测试类:

@Controller
public class StudentController {
    @Autowired
    private Student student;
    
    @PostConstruct
    public void printStu(){
        System.out.println(student);
    }
}

打印结果:

在这里插入图片描述

yml配置list集合

# list集合
nametype:
  name:
    - 张三
    - 李四
@Component
@ConfigurationProperties("nametype")
@Setter
@Getter
@ToString
public class TestList {
    private List<String> name;
}
@Controller
public class ListController {
    @Autowired
    private TestList testList;


    @PostConstruct
    public void printList(){
        System.out.println(testList);
    }
}

打印结果:

在这里插入图片描述

yml的优点

  • 写法简单,易于理解
  • 支持更多的数据类型,如数组,对象等
  • 支持更多的编程语言,Java,Python,Glang等

4.2.3 properties与yml的对比

  • 格式不同,properties是以key=value的格式,yml是以key: value的格式,并且层级之间使用换行缩进方式配置,vlaue与:之间的空格不可省略
  • properties配置存在冗余,yml很好的解决冗余问题
  • properties是项目默认的配置文件格式,yml是后面新的一种配置格式
  • yml的通用性更好,支持更多的语言
  • yml支持更多的数据类型

4.2.4 设置不同环境下的配置文件

一般项目分为三个环境:

  1. 开发环境
  2. 测试环境
  3. 上线运行环境

环境不同可能配置项存在差异,如数据库源,端口号不同等差异

我们可以使用如下配置文件的方式解决:

  • 相同公共的配置放在application.yml(.properties)中
  • 不同环境的配置文件放在application-xxx.yml(.properties)中(xxx可以为任意名字)
  • 一般使用pro为线上环境,dev为开发环境,test为测试环境

在公共的配置文件中(主配置文件)添加如下配置项:

# 设置配置文件的运行平台
spring:
  profiles:
    active: dev

示例:开发环境端口要求4567,测试环境端口要求5678,线上环境端口要求1234

在这里插入图片描述

如果改变环境,只需要更改主配置文件application.yml中的配置项spring.profiles.active即可

4.3 更多的系统配置项

链接: 点击获取更多的系统配置项

5. Spring Boot日志文件

5.1 日志的作用

日志最主要的用途就是排除和定位问题

除此外,还可以:

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

我们发现在启动Spring Boot项目的时候,默认就有日志输出

在这里插入图片描述
因为Spring Boot内置了日志框架SLF4Jlogback,默认的日志是打印在控制台上的

5.2 自定义打印日志

  1. 得到日志对象(每个类都有自己的日志对象
  2. 使用日志对象提供的方法打印日志
    private static final Logger log = LoggerFactory.getLogger(TestHello.class);
    @RequestMapping("/hello")
    public String hello(){
        log.trace("Im trace");
        log.info("Im info");
        return "hello spring boot";
    }

在这里插入图片描述
发现只打印了info,因为日志的默认级别是info,只能打印它与比它更大级别的日志,trace的级别不够

更简单的打印日志

每次都获取到日志对象,然后使用对象调用方法比较繁琐,因为每个类都要进行相同的操作,我们可以简化上述操作,使用如下操作方式:

  1. 添加lombok依赖
  2. 在类上添加 @Slf4j 注解后,在类中就可以直接使用log对象
@Slf4j
public class LogController {
    public void writeLog(){
        log.info("write log"); //添加注解后,就有了log对象
    }
}

lombok的原理

lombok是作用在编译期的,在.java文件编译为字节码文件时候,会给.class文件中添加需要的代码

在这里插入图片描述

5.3 日志级别

日志级别可以帮助我们筛选信息,从而节省程序员筛选日志的时间,日志级别可以控制不同环境下,打印日志的详细程度,如开发环境我们需要详细的日志信息,而线上环境我们为了性能,就打印少量的日志

  • trace:级别最低
  • debug:调试级别的,常用于跟踪程序的进展
  • info:普通的打印信息(默认的日志级别)
  • warn:警告级别,不影响使用,但应该注意
  • error:错误级别,错误日志信息打印
  • fatal:致命级别,因代码异常导致程序退出,级别最高

日志的级别越高,打印的日志信息就越少

那如何设置日志的打印级别呢?

在配置文件里,添加系统配置项 logging.level

# 设置日志打印级别
logging:
  level:
    root: debug
    # 指定包下的日志打印级别
    com:
      example:
        demo:
          controller: warn 

5.4 日志持久化

上面的日志打印都只是打印在控制台,但是线上我们一般都把日志持久化到文件中,以此方便日后排查问题

日志持久化保存有以下两种方式:

  1. 设置日志的保存路径
  2. 设置日志的保存名称
# 设置日志持久化保存的目录
logging:
  file:
    path: D:\\log
# 设置日志持久化保存的文件名称
logging:
  file:
    name: D:\\log\\springboot.log

运行程序后,会在本地生成一个日志文件,该日志文件是追加写的方式,即重启程序时,日志内容不会消失,也不会覆盖,而是追加写

在这里插入图片描述

日志文件的大小默认是10MB,如果超过此大小,会重新创建一个文件保存新日志,可以通过系统配置项来设置这个文件的大小

# 设置日志文件大小的最大值
logging:
  logback:
    rollingpolicy:
      max-file-size: 50MB

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

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

相关文章

想把PDF转成Word?这三个免费在线工具不容错过!

在日常工作和学习中&#xff0c;我们经常会遇到需要将PDF文件转为Word文档的情况。本文将介绍三种不同的PDF转Word的方法。 首先是推荐的PDF转Word网站&#xff1a;记灵在线工具&#xff08;http://remeins.com)。 这是一个功能非常强大的PDF在线处理网站&#xff0c;可以完全…

CNI_02_Flannel 跨主机通信Overlay Network三种实现

文章目录 一、前言二、跨主机网络三、UDP模式四、VXLAN模式4.1 VXLAN完全在内核态中构建Overlay Netwok覆盖网络4.2 VXLAN模式整个流程步骤1&#xff1a;网络请求从容器到宿主机步骤2&#xff1a;根据目的容器IP在Node1宿主机上找到正确的route路由步骤3&#xff1a;构建内部数…

深度学习实战项目(一)-基于cnn和opencv的车牌号识别

深度学习实战项目(一)-基于cnn和opencv的车牌号识别 网上大部分是关于tensorflow&#xff0c;使用pytorch的比较少&#xff0c;本文也在之前大佬写的代码的基础上&#xff0c;进行了数据集的完善&#xff0c;和代码的优化&#xff0c;效果可比之前好一点。 数据集 数据集来自…

AutoCV:Python基础总结

目录 Python基础总结前言Python基础课程总结第一课&#xff1a;开发环境和基本数据类型第二课&#xff1a;控制流程和函数第三课&#xff1a;闭包和根号2的求解第四课&#xff1a;类和三大神器第五课&#xff1a;文件IO和pickle、json第六课&#xff1a;作用域、模块和包、Data…

IDM下载器|Windows系统经典下载工具idm6.41|IDM如何在线视频下载工具 |下载视频教程

IDM全称Internet Download Manager,是一种将下载速度提高最多5倍的专业下载工具,支持大部分文件格式下载和基本所有的下载链接,无视网址本身下载限速,直接达到电脑该有的网速。 下载更快更可靠 下载INTERNET DOWNLOAD MANAGER(IDM下载器)开始您的极速下载旅程&#xff0c;永远…

鲲志说 我的创作纪念日(2023-05-07)

目录 前言有时候缘分就是这么巧&#xff01;努力终会有所获日常规划成就憧憬 前言 今天是个特殊的日子&#xff0c;是我成为创作者的第2048天。但不仅仅是因此今天才特殊&#xff0c;更重要的是因为你&#xff0c;今天才特殊&#xff0c;值得纪念。不管前路如何&#xff0c;积…

微信小程序开发19__第三方UI组件Vant Weapp的应用

为了提高小程序的开发效率&#xff0c; 可以考虑使用第三方 UI 组件来实现界面的视觉统一。 本文以有赞第三方 UI 组件库 Vant Weapp 为例&#xff0c;介绍如何使用自定义组件 实现一个小程序。 Vant Weapp 是一款轻量、 可靠的小程序UI组件库&#xff0c; 与有赞移动端组…

数字图像处理-绪论

数字图像处理-绪论 文章目录 前言一、闲谈二、什么是数字图像处理&#xff1f;2.1. 什么是数字图像&#xff1f;2.1.1. 可见光图像2.1.2. 不可见光图像 2.2. 什么是数字图像处理&#xff1f; 三、数字图像处理的前世今生3.1. 数字图像处理的前世3.2. 数字图像处理的今生 四、数…

计网笔记 01 概述 计算机网络体系结构、参考模型

文章目录 前言1、计网概述1.1 概念、组成、功能、分类1.1.1 概念1.1.2 计网组成1.1.2 计网分类 1.2 标准化工作及相关组织1.2.1 标准的分类 1.3 性能指标★★★1.3.1 速率相关性能指标1.3.2 时延相关指标 2、体系结构&参考模型★★★★★&#xff08;对应王道视频7-10p 相当…

【MySQL学习】MySQL 内置函数

文章目录 一、日期函数二、字符串函数三、数学函数四、其他函数 一、日期函数 函数名称功能描述current_data()获取当前日期current_time()获取当前时间current_timestamp()获取当前时间戳date()返回datetime的日期部分date_add(date, interval d_value_type)以date为基础&…

【2023/05/07】汇编语言

Hello&#xff01;大家好&#xff0c;我是霜淮子&#xff0c;2023倒计时第2天。 Share Stray birds of summer come to my window to sing and fly away. And yellow leaves of autumn,which have no songs,flutter and full there with a sigh. 译文&#xff1a; 夏天的鸟&…

网络学习笔记

【1】路由器与交换机的区别与联系 https://blog.csdn.net/baidu_32045201/article/details/78305586 交换机&#xff1a;用于局域网内网的数据转发 路由器&#xff1a;用于连接局域网和外网 【2】IP地址 1&#xff09;IP地址是Internet中主机的标识 2&#xff09;Internet中…

OpenCV学习12 用色调、饱和度和亮度表示颜色

BGR转HSV 效果&#xff1a; 代码&#xff1a; #include <iostream> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp>using namespace cv;int main() {Mat dog imread("/home/jason/work/01-img/dog.png");// -…

Codeforces Round 871 (Div. 4)——G题讲解

蒟蒻来讲题&#xff0c;还望大家喜。若哪有问题&#xff0c;大家尽可提&#xff01; Hello, 大家好哇&#xff01;本初中生蒟蒻讲解一下G. Hits Different! 上绿名喽&#xff01; G. Hits Different 题目描述 In a carnival game, there is a huge pyramid of cans with 20…

SmartSoftHelp 自定义开源C#代码生成器

​​​​​​蓦然回首终结者SmartSoftHelp开发辅助工具MiniLite2.0迷你版 V3.5 自定义生成 dbhelper Model BLL DAL sqltxt UI 方便快捷&#xff0c;支持自编码&#xff0c;自编译&#xff0c;自己修改生成代码内容和格式&#xff0c;方便快捷... 开源代码生成说明: 1.目录…

python+django汽车4S店零配件保养服务管理系统

汽车4S服务管理系统包括三种用户。管理员、普通员工、客户。 开发语言&#xff1a;Python 框架&#xff1a;django/flask Python版本&#xff1a;python3.7.7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCharm django 应用目录结构管…

vue diff算法与虚拟dom知识整理(5) 手写一个自己的h函数

本文的意义在于教会大家如何手写一个h函数 上文中 我们简单理解了一下h函数 他的作用是构建一个虚拟的dom节点 掌握这个函数还是很有必要的 首先 你想要写出来 还是得去看原版的ts代码 这边 我们没必要把太多注意力放在TS上 所以 我们这边是看ts代码 然后 仿写js代码 我们在…

Faster RCNN在pycharm中运行

文章目录 1 代码2 文件说明3 代码解析5 数据6 自制数据集6.1 创建文件夹6.2 标注图片 7 开始训练 1 代码 参考B站up主&#xff1a;霹雳吧啦Wzgit clone https://github.com/WZMIAOMIAO/deep-learning-for-image-processing 2 文件说明 首先找到faster_rcnn ├── backbone: …

PCL学习七:Features-特征

参考引用 Point Cloud Library黑马机器人 | PCL-3D点云 1. 特征描述与提取 3D 点云特征描述与提取是点云信息处理中的最基础也是最关键的部分&#xff0c;点云识别、分割、重采样、配准和曲面重建等大部分算法&#xff0c;都十分依赖特征描述与提取的结果 从尺度上来划分&…

MYSQL01高级_Linux版安装、各级别字符集、字符集与比较规则、SQL大小写规范

文章目录 ①. MySQL - linux版安装②. 字符集的相关操作③. 各级别的字符集④. 字符集与比较规则(了解)⑤. SQL大小写规范⑥. sql_mode的合理设置 ①. MySQL - linux版安装 ①. 进入mysql官网,找到安装文件 ②. 将抽取出来的文件放在linux下的opt下 MySQL Community Serv…