SpringBoot(项目创建使用+配置文件+日志文件)

news2025/1/21 0:57:39

目录

1. Spring Boot 项目创建

2. 写一个 Hello World 并运行

3. 配置文件的作用及格式

4. properties 配置文件的基本语法 

5. 读取配置文件

6. yml 配置文件说明

7. properties 和 yml 的区别

8. SpringBoot 日志文件

8.1 日志的作用

8.2 自定义日志打印

8.3 日志的级别

8.4 日志持久化

8.5 更简单的实现日志打印lombok


Spring的出现是为了简化 Java 程序开发,而 SpringBoot 的出现是为了简化 Spring 程序开发.

SpringBoot 就是 Spring脚手架

  • 快速集成框架,SpringBoot 提供了启动添加依赖的功能
  • 内置运行容器,无需配置 Tomcat 等 Web 容器, 直接运行和部署程序
  • 快速部署项目,无需外部容器即可启动并运行项目
  • 可以完全抛弃繁琐的 XML, 使用注解和配置的方式进行开发
  • 支持更多的监控指标, 可以更好的了解项目的运行情况

1. Spring Boot 项目创建

我这里是专业版,不用下载插件直接可以创建

第一次打开 SpringBoot 项目需要加载很久, 因为当前 SpringBoot 框架并没有在自己的本地仓库

(2) 选取 SpringBoot 的版本, 和需要使用的工具包  

 (3) Finish后,可以看到创建成功了,直接运行一下,如果出现这个 JVM运行时间就说明创建成功了

 (4) 删除掉无用的目录 

2. 写一个 Hello World 并运行

(1) 创建一个类,注意和 Application 平级,写一个方法,返回 Hello World

  1. ​​​​​先加一个 @Controller,    也就是运行项目后,会先找到这个类
  2. 然后再加 @RequestMapping,   这个的作用就是前面找到 @Controller后,有了这个@RequestMapping就会锁定我写的方法 sayHi()   ,注意里面字母都小写
  3. 加@ResponseBody的作用是,我想返回给页面一个非静态的数据(也就是给响应Body中放一个字符串)

 然后直接运行,页面输入 127.0.0.1:8080/sayhi 可以看到访问成功了


3. 配置文件的作用及格式

(1) 在整个项目中所有重要的数据都是在配置文件中配置的, 比如:

  • 项目的启动端口
  • 数据库的连接信息 (包含用户名和密码的设置)
  • 第三方系统的调用秘钥等信息
  • 用于发现和定位问题的普通日志和异常日志等

在 Spring Boot 项目中如果没有配置信息,就不能连接和操作数据库, 甚至是不能保存可以用于排查问题的关键日志, 所以配置文件的作用是非常重要的

(2) 配置文件的分类:

  • 系统的配置文件, 比如: 连接字符串, 日志的相关设置
  • 用户自定义的

(3) 配置文件的格式

  •  . properties
  •  . yml

一个项目中可以存在两种配置文件 (properties 和 yml) , 但是不建议这样搞

当一个项目的某个配置, 出现在两种格式的配置文件中时, 那么配置项会以 properties 为主

 如果此时修改了配置文件的名字, 重新运行程序, 就访问不到了


4. properties 配置文件的基本语法 

 properties 是以键值的形式配置的, key=value  中间是以 "=" 连接的 

关于 properties 中文乱码的问题处理

因为 properties 是早期的配置文件, 不支持中文, 所以比如当重启 idea 后, 中文就会乱码

可以设置一下

(1) 配置当前项目中文乱码的问题

 (2) 配置新项目中文乱码的问题


5. 读取配置文件

如果在项目中, 想要主动读取配置文件中的内容, 可以使用 @Value 注解来实现

@Value 注解使用 "${}" 的格式读取

 

 可以看到如果要读取多个配置文件中的信息, properties 配置文件中会有很多的容易信息, 比如

 

 要想解决这个问题, 就可以使用 yml 配置文件的格式化了


6. yml 配置文件说明

yml 意思是"另一种标记语言", yml 是一个可读性高, 易于理解,用来表达数据序列化的格式. 特别适合用来表达或编辑数据结构, 各种配置文件等. yml 最大优势是可以跨语言, 比如 golang java python 都可以使用 yml 作为配置文件

(1) yml 基本语法

yml 是树形结构的配置文件, 基础语法是 "key: value",  注意 中间使用冒号和空格连接的,空格不要省略

(2) yml 配置不同的数据类型

# 字符串
string.value: hello

# 布尔值
boolean.value: true

# 整数
int.value: 10

# 浮点数
float.value: 3.14159

# Null, ~ 表示 null
null.value: ~

(3) yml 单双引号的问题

(4) 配置对象

在 yml 中配置对象, 这个时候需要使用注解 @ConfigurationProperties 来读取

 

(5)配置集合

配置文件也可以配置 list 集合


7. properties 和 yml 的区别

  • properties 是以 key=value 的形式配置的键值类型的配置文件, 而 yml 使用的是类似于 json 格式的配置方式, key: value 中间用冒号和空格连接
  • properties 是早期并且也是默认的配置文件格式, 这种方式存在一定的冗余数据, yml 可以很好的解决这种冗余问题
  • yml 通用性更好,支持更多语言, 并且支持更多的数据类型

8. SpringBoot 日志文件

8.1 日志的作用

日志是程序的重要组成部分,当程序报错是就可以通过,日志来发现和定位问题,并且日志的作用还有

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

Spring Boot 项目在启动的时候就有默认的日志输出

如果这个默认的日志输出,就可以发现问题

  • Spring Boot 内置了日志框架
  • 默认情况下, 输出的日志并非是开发者定义和打印的, 那么开发者如何在程序中自定义打印日志
  • 日志默认是打印在控制台上的, 但这样是不能被保存的, 那么怎样把日志持久化保存下来

8.2 自定义日志打印

自定义打印日志的实现步骤:

  1. 在程序中得到日志对象
  2. 使用日志对象的相关语法输出要打印的内容

 可以看到这里日志打印只出现了三个, 这是因为默认的日志级别是 info 的, 这里只会输出级别大于等于 info 的

package com.example.demo;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @Description:
 * @Date 2022/12/27 14:04
 */
@Controller
@ResponseBody
public class UserController2 {

    // 1.先得到日志对象 (设置当前类的类型)
    private final static Logger log = LoggerFactory.getLogger(UserController2.class);

    @RequestMapping("/sayhii")
    public void sayHii() {
        // 2.使用日志对象提供的方法进行打印
        log.trace("trace 最小");
        log.debug("debug 调试");
        log.info("info 普通");
        log.warn("warn 警告");
        log.error("error 错误");
    }
}

8.3 日志的级别

日志级别可以帮助筛选出重要的信息

  1. trace: 微量, 少许, 级别最低
  2. debug: 调试日志
  3. info: 普通信息日志
  4. warn: 警告日志
  5. error: 错误日志
  6. fatal: 致命的日志, 系统输出的, 不能自定义打印

当存在局部日志级别和全局日志级别设置时, 那么当访问局部日志时, 使用的是局部日志级别, 

局部日志级别优先级 > 全局的日志级别 

# 设置全局的日志级别 (properties)
logging.level.root=info
# 设置局部文件夹的日志级别
logging.level.com.example.demo.controller=trace
# 全局日志级别的配置  yml
logging:
  level: 
    root: error

8.4 日志持久化

日志持久化: 将日志永久的保存到磁盘的某个位置, 有两种方式

  1. 在配置文件中设置日志的保存路径, 当设置了保存路径之后, 那么日志就会自动的进行持久化
  2. 在配置文件中设置日志保存的名称, 日志会自动进行持久化

(1) 设置日志的保存路径

# 设置日志的保存目录 (properties)
logging.file.path=D:/IDEA/

# 如果想使用 \ 就要注意转义的问题,这里用\\
logging.file.path=D:\\IDEA\\
# 设置日志保存的目录  (yml)
logging:
  file:
    path: D:/IDEA/

可以看到日志保存到了这个目录下的位置 

 (2) 设置日志的保存名称

# 设置日志的保存名称 (properties)
logging.file.name=D:/IDEA/spring-boot.log

8.5 更简单的实现日志打印lombok

添加 lombok 到当前项目

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

(1) 使用 @Slf4j 得到日志对象 log

(2) 使用 log 对象自定义打印日志

package com.example.demo.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@ResponseBody
@Slf4j   // 代替了之前需要通过 LoggerFactory.getLogger 操作
public class UserService {

    @RequestMapping("/sayhi2")
    public void sayHi2() {
        log.trace("trace");
        log.debug("debug");
        log.info("info");
        log.warn("warn");
        log.error("error");
    }
}

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

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

相关文章

低代码:全力构筑企业数字转型新生态

数字转型企业处于数字经济大潮的风口浪尖&#xff0c;既是创新主体也是数字技术广泛运用的重要平台&#xff0c;主动调整企业发展战略以顺应数字化转型是其明智抉择。企业经营决策者应深刻认识数字化转型的发展特点及本质要求&#xff0c;看到数字化转型是企业战略的迭代升级&a…

C#,图像二值化(19)——全局阈值的香巴拉算法( Shanbhag Thresholding)及源程序

1 算法描述&#xff08;凑数&#xff09;thresholdShanbhag由Robert Haase基于G.Landini和W.Rasband的工作。自动阈值器利用ImageJ中实现的Shanbhag阈值方法&#xff0c;使用GPU上确定的直方图创建尽可能类似于ImageJ“应用阈值”方法的二进制图像。thresholdShanbhag By Rober…

「精致店主理人」:青年敢有所为,梦想掷地有声

第三期「精致店主理人」青年创业孵化营于12月16日在周大福顺德匠心智造中心&#xff0c;完美收官&#xff01;「精致店主理人」青年创业孵化营是在共青团深圳市委员会的指导下&#xff0c;由深圳市青少年发展基金会与周大福珠宝集团联合主办&#xff0c;郑家纯青年发展专项基金…

CPU基本结构和运行原理

1 CPU的基本结构 1.1 CPU是一个计算系统的核心 Control Unit&#xff0c;负责控制。如指令计数器&#xff0c;指令跳转。 Logic Unit&#xff0c;负责计算。如加减&#xff0c;比较大小等。 1.2 南北桥芯片将CPU与外设连接 北桥&#xff1a;CPU和内存、显卡等部件进行数据交…

Python解题 - CSDN周赛第22期 - 取数字

又是大放水的一期&#xff0c;连我都可以10分钟解决战斗了。得益于Python&#xff0c;前面三题5分钟内就pass了&#xff0c;而最后一题也是之前刷过类似的。。。于是相应地&#xff0c;这期的题解也会简短一些。 这次的好成绩代表不了实力&#xff0c;但也希望这样的好运气能一…

自然语言处理 概览理解 NLP specialization - Supervised ML

自然语言处理 概览理解 NLP specialization - Supervised ML Remember that understanding the data is one of the most critical steps in Data Science 自然语言处理可以实现语义识别&#xff0c;情感识别&#xff0c;文本翻译等等功能&#xff0c;当然最近情况下最火的便…

Java支付宝沙箱环境支付,官方Demo远程调试【内网穿透】

文章目录1. 下载当面付demo2. 修改配置文件3. 打包成web服务4. 局域网测试5. 内网穿透6. 测试公网访问7. 配置二级子域名8. 测试使用固定二级子域名访问在沙箱环境调试支付SDK的时候&#xff0c;往往沙箱环境部署在本地&#xff0c;局限性大&#xff0c;在沙箱环境中有多种支付…

MATLAB-一维插值运算

一维插值是指对一维函数进行插值。已知n1个结点(x,y,)&#xff0c;其中x,互不相同(j0&#xff0c;1&#xff0c;2&#xff0c;... n),求任意插值点x*处的插值y*。求解一维插值问题的主要思想是:设结点由未知的函数g(x)产生&#xff0c;函数g(x)为连续函数且g(x)y;(j0,1,...,n);…

北大硕士LeetCode算法专题课---算法复杂度介绍

算法复杂度中大O的含义 推荐教程&#xff1a;北大硕士带你手撕Leetcode算法题 大O复杂度表示法 算法面试中&#xff0c; 经常会被问到&#xff0c;你写的算法复杂度是多少&#xff0c; 或者设计一个复杂度为 O(nlogn) 的算法复杂度分析是估算算法执行效率的方法&#xff0c;…

大厂的格局在细节上是怎么被拉低的

讲几个例子&#xff0c;都是大厂&#xff0c;作为大厂小散沙客户&#xff0c;也就是平头老百姓的角度来反观一下几个问题 第一个【脉脉】 今天&#xff08;2023年1月9日&#xff09;偶尔相等一下买买查看一下信息&#xff0c;由于手机没有安装APP.想借助PC的web端登录一下 它提…

小程序中无法播放阿里云的视频点播

背景视频直接存在自己的服务器&#xff0c;视频大了会存在卡顿现象&#xff0c;只能用阿里云或其它服务商的相关服务。原来在APP中已有了视频播放的功能&#xff0c;而且已经能正常使用&#xff0c;但视频的url是 http。现在期望在小程序中也添加视频播放的功能。初期操作申请相…

css——扁平圆弧(底部弧度)

案例演示 使用伪类处理&#xff0c;先将元素自身定位为relative&#xff0c;伪类设置content:‘’&#xff0c;并相对定位为absolute&#xff0c;再设置下left ,top 值&#xff0c;然后通过改变width和和left就可以调节弧度。宽度需大于100%&#xff0c;将left设为&#xff08;…

微分方程(人口预测与传染病模型)

一、定义 微分方程&#xff1a;含导数或微分的方程 微分方程的阶数&#xff1a;所含导数或微分的最高阶数&#xff0c;如y’’’2y’’-2x0是三阶微分方程 微分方程的解&#xff1a;使得微分方程成立的函数 例如y’-2x0的解可以为x或者x1 微分方程的通解和特解&#xff1a;特…

基于Arduino Pro Micro的游戏手柄制作

基于Arduino Pro Micro的游戏手柄开发 1. Arduino IDE下载及安装 在Arduino官网Software | Arduino下载最新版Arduino IDE并安装。 或使用QQ群中提供的免安装版Arduino IDE&#xff0c;安装完成后Arduino Pro Micro的pin脚定义使用下面路径下的leonardo: 2. Arduino Pro Micr…

GrapeCity 文档处理商业系列Crack-6.0.2Version

GrapeCity 文档处理商业系列Crack文档 API 使用高速、直观的文档 API 全面控制您的文档 包括&#xff1a; Documents for Excel, .NET Documents for Data Viewer Documents for PDF Documents for PDF Viewer Documents for Word Documents for Imaging Documents for Image V…

数据库MySQL基础入门之MySQL隐式转换

一、问题描述 rootmysqldb 22:12: [xucl]> show create table t1\G *************************** 1. row *************************** Table: t1Create Table: CREATE TABLE t1 ( id varchar(255) DEFAULT NULL ) ENGINEInnoDB DEFAULT CHARSETutf8 1 row in set (0.0…

ArcGIS基础实验操作100例--实验74灾害影响缓冲区分析

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验74 灾害影响缓冲区分析 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;…

剑指offer----C语言版----第十四天

表示数值的字符串 原题链接&#xff1a;剑指 Offer 20. 表示数值的字符串 - 力扣&#xff08;LeetCode&#xff09;1.1 题目描述 请实现一个函数用来判断字符串是否表示数值&#xff08;包括整数和小数&#xff09;。数值&#xff08;按顺序&#xff09;可以分成以下几个部分&a…

常见胶片的分类和结构

胶片的分类方法非常多&#xff0c;本质上属于高分子材料范畴&#xff0c;很多类别已经超出笔者的认知范围&#xff0c;我们只对与档案数字资源长期保存和异质备份相关的胶片分类方法进行介绍。笔者整理了十大分类如下图所示&#xff1a; 各分类简要介绍 1. 按宽度尺寸分类 常…

【Linux】进程信号万字详解(上)

&#x1f387;Linux&#xff1a; 博客主页&#xff1a;一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a; 看似不起波澜的日复一日&#xff0c;一定会在某一天让你看见坚持…