SpringBoot配置文件/日志
目录
一,SpringBoot配置文件
1,配置文件的格式:
2,properties
3,yml
1,properties与yml的转换
2,读取配置选哪个中的内容
3,单双引号的差异:
4,配置对象:
5,配置集合/配置map
6,yml的优缺点:
二,验证码:
学习目的:
实现样例:
接口定义:
代码总结:
三,日志:
1,概述
2,打印日志:
3,日志的框架:门面模式
4,日志级别分类:
5,日志持久化:
6,配置文件分割:
7,其他配置项
8,注解输出日志:
一,SpringBoot配置文件
配置⽂件主要是为了解决硬编码带来的问题,把可能会发⽣改变的信息,放在⼀个集中的地⽅,当我们启 动某个程序时,应⽤程序从配置⽂件中读取数据,并加载运⾏
1,配置文件的格式:
• application.properties
• application.yml
• application.yaml
properties与yml同时存在,同时生效,但是如果配置项有冲突的时,以properties
2,properties
properties 是以键值的形式配置的,key和value之间是以"="连接的,配置⽂件中使⽤“#”来添加注释信息。
my.key1=zhangsan
my.key2=true
my.key3=13
@Value("${my.key1}")private String key1;@Value("${my.key2}")private String key2;@Value("${my.key3}")private String key3;@PostConstruct//在类加载过程中就会执行public void readValues2(){System.out.println("从配置文件中读取:"+key1);System.out.println("从配置文件中读取:"+key2);System.out.println("从配置文件中读取:"+key3);}
3,yml
yml的全称为yaml,单词之间用:\n分割,key和Value之间用':<空格>',注意:空格不可以省略
1,properties与yml的转换
#properties
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
properties转yml,把 '.' 转化为 ':\n'
yml转properties,把 ':\n' 转化为 '.'
#yml
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=falseusername: rootpassword: root
2,读取配置选哪个中的内容
@RestController
public class YmlController {@Value("${spring.datasource.url}")public String url;@Value("${spring.datasource.username}")public String username;@Value("${spring.datasource.password}")public String password;@PostConstructpublic void readValue(){System.out.println("yml配置文件:"+url);System.out.println("yml配置文件:"+username);System.out.println("yml配置文件:"+password);}}
空字符串直接后面什么都不加就可以,但是这种方式不直观,更多的表示使用引号括起来,null用~代表null
3,单双引号的差异:
string:str1: Hello \n Spring Boot.str2: 'Hello \n Spring Boot.'str3: "Hello \n Spring Boot."
字符串默认不用加上单引号或者双引号,加上双引号后转义字符会执行
4,配置对象:
#yml
student:id: 1name: Javaage: 18@Configuration
@Data
@ConfigurationProperties(prefix = "student")
public class StudentConfig {private Integer id;private String name;private Integer age;
}@Autowiredpublic StudentConfig studentConfig;@PostConstructpublic void readValue(){System.out.println(studentConfig.toString());}
5,配置集合/配置map
#yml
student:id: 1name: Javaage: 18dbtype:- mysql- sqlServer- oraclemap:k1: kk1k2: kk2k3: kk3package com.ABdolphin.ioc.config;
@Configuration
@Data
@ConfigurationProperties(prefix = "student")
public class StudentConfig {private Integer id;private String name;private Integer age;private List<String> dbtype;private Map<String,String> map;
}package com.ABdolphin.ioc.Contraller;
@RestController
public class YmlController {@Autowiredpublic StudentConfig studentConfig;@PostConstructpublic void readValue(){System.out.println(studentConfig.toString());}}
6,yml的优缺点:
优点:可读性高,写法简单,易于理解
缺点:
但是不适合写复杂的配置
对格式有较强的要求
二,验证码:
学习目的:
1,学习查看第三方工具的文档
2,学习验证码的实现逻辑
3,练习配置项和代码能力
实现样例:
接口定义:
1,生成验证码 | 2,校验验证码是否正确 | |
URL | /captcha/getCaptcha | /captcha/check |
请求参数 | 无参 | captcha |
响应 | 验证码图片内容 | true/false |
由于为后端代码练习,所以前端代码不进行过多赘述
我们可以借助工具:Hutool是⼀个Java⼯具包类库,对⽂件、流、加密解密、转码、正则、线程、XML等JDK⽅法进⾏封 装,组成各种Util⼯具类. Hutool是⼀个⼩⽽全的Java⼯具类库,通过静态⽅法封装,降低相关API的学习成本,提⾼⼯作效 率,使Java拥有函数式语⾔般的优雅,
Hutool官⽹:https://hutool.cn/
代码总结:
yml:
spring:application:name: captcha-demo
captcha:width: 100height: 50VALID_TIME_OUT: 60000session:key: SESSION_CAPTCHA_KEYdate: SESSION_CAPTCHA_DATE
package com.ABdolphin.captcha.model;@Data
@Configuration
@ConfigurationProperties(prefix = "captcha")
public class CaptchaProperties {private Integer width;private Integer height;private long VALID_TIME_OUT;private Session session;@Datapublic static class Session{private String key;private String date;}}
package com.ABdolphin.captcha.controller;@RestController
@RequestMapping("/captcha")
public class CaptchaController {private static Logger logger= LoggerFactory.getLogger(CaptchaController.class);@Autowiredprivate CaptchaProperties captchaProperties;@GetMapping("/getCaptcha")public void captcha(HttpSession session,HttpServletResponse response){//生成验证码LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(captchaProperties.getWidth(), captchaProperties.getHeight());//打印验证码String code=lineCaptcha.getCode();System.out.println("System随机生成验证码:"+code);logger.info("logger随机生成验证码:"+code);//存储 Sessionsession.setAttribute(captchaProperties.getSession().getKey(),code);session.setAttribute(captchaProperties.getSession().getDate(),new Date());try {lineCaptcha.write((response.getOutputStream()));response.setContentType("image/jpeg");response.setCharacterEncoding("UTF-8");response.setHeader("Pragma","No-cache");} catch (IOException e) {throw new RuntimeException(e);}}@RequestMapping("/check")public boolean check(String captcha,HttpSession session){System.out.println("用户输入的验证码:"+captcha);if (!StringUtils.hasLength(captcha)){return false;}String code=(String) session.getAttribute(captchaProperties.getSession().getKey());Date date = (Date) session.getAttribute(captchaProperties.getSession().getDate());if (date==null||(System.currentTimeMillis()-date.getTime())>captchaProperties.getVALID_TIME_OUT()){return false;}return captcha.equalsIgnoreCase(code);}
}
三,日志:
1,概述
通过打印⽇志来发现和定位问题,或者根据⽇志来分析程序的运⾏过程.⽇志主要是为了发现问题,分析问题,定位问题的,但除此之外,⽇志还有很多⽤途.
1). 系统监控
监控现在⼏乎是⼀个成熟系统的标配, 我们可以通过⽇志记录这个系统的运⾏状态,每⼀个⽅法的响应 时间,响应状态等,对数据进⾏分析,设置不同的规则,超过阈值时进⾏报警.⽐如统计⽇志中关键字的数量,并在关键字数量达到⼀定条件时报警,这也是⽇志的常⻅需求之⼀
2),数据采集
统计⻚⾯的浏览量,访客量,点击量等
2,打印日志:
在程序中获得日志的对象,导入的是这个包,不要导错包!!
private static Logger logger= LoggerFactory.getLogger(CaptchaController.class);logger.info("logger随机生成验证码:"+code);
3,日志的框架:门面模式
采用门面模式(外观模式),即提供了一个统一的接口,用来访问系统中的一群子接口,其主要特征是定义了⼀个⾼层接⼝,让⼦系统更容易使⽤
SLF4J不同于其他⽇志框架,它不是⼀个真正的⽇志实现,⽽是⼀个抽象层,对⽇志框架制定的⼀种规范, 标准,接⼝.所有SLF4J并不能独⽴使⽤,需要和具体的⽇志框架配合使⽤
SLF4J就是这个⽇志⻔⾯.不同⽇志框架的API接⼝和配置⽂件不同,如果多个⽇志框架共存,那么不得不维护多套配置⽂件, 如果要更换⽇志框架,应⽤程序将不得不修改代码,并且修改过程中可能会存在⼀些代码冲突.引⼊⻔⾯⽇志框架之后,应⽤程序和⽇志框架(框架的具体实现)之间有了统⼀的API接⼝(⻔⾯⽇志框架 实现),此时应⽤程序只需要维护⼀套⽇志⽂件配置,且当底层实现框架改变时,也不需要更改应⽤程序代码.
门面模式的优点:
(1)减少了系统的相互依赖.实现了客⼾端与⼦系统的耦合关系,这使得⼦系统的变化不会影响到调⽤它 的客⼾端
(2)提⾼了灵活性,简化了客⼾端对⼦系统的使⽤难度,客⼾端⽆需关⼼⼦系统的具体实现⽅式,⽽只需 要和⻔⾯对象交互即可
(3)提⾼了安全性.可以灵活设定访问权限,不在⻔⾯对象中开通⽅法,就⽆法访问
4,日志级别分类:
从⾼到低依次为:FATAL、ERROR、WARN、INFO、DEBUG、TRACE
• FATAL:致命信息,表⽰需要⽴即被处理的系统级错误.
• ERROR:错误信息,级别较⾼的错误⽇志信息,但仍然不影响系统的继续运⾏. • WARN:警告信息,不影响使⽤,但需要注意的问题
• INFO:普通信息,⽤于记录应⽤程序正常运⾏时的⼀些信息,例如系统启动完成、请求处理完成等. • DEBUG:调试信息,需要调试时候的关键信息打印.
• TRACE:追踪信息,⽐DEBUG更细粒度的信息事件(除⾮有特殊⽤意,否则请使⽤DEBUG级别替代)
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/logger")
public class LoggerController {public static Logger logger= LoggerFactory.getLogger(LoggerController.class);@RequestMapping("/logger1")public String logger(){logger.error("=========error=========");logger.warn("=========warn=========");logger.info("=========info=========");logger.debug("=========debug=========");logger.trace("=========trace=========");return "日志打印";}
}
这里默认的配置级别info及以上的日志,也可以将其在配置文件中进行改变
yml配置:
logging:level:root: debug
5,日志持久化:
配置日志的储存目录:
logging.file.name
logging.file.path
logging.file.name 和 logging.file.path 两个都配置的情况下,只⽣效其⼀,以 logging.file.name 为准
6,配置文件分割:
logging.logback.rollingpolicy.file-name-pattern
logging.logback.rollingpolicy.file-nax-file-size
常见的 Application Properties
logging:level:root: infofile:name: logger/spring-boot-loglogback:rollingpolicy:file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%imax-file-size: 1KB
7,其他配置项
改变日志的颜色
重新启动程序就支持颜色了
8,注解输出日志:
1. 添加lombok框架⽀持 2. 使⽤ @slf4j 注解输出⽇志
@RestController
@RequestMapping("/logger")
@Slf4j
public class LoggerController2 {public String logger(){log.error("=========error=========");log.warn("=========warn=========");log.info("=========info=========");log.debug("=========debug=========");log.trace("=========trace=========");return "日志打印";}
}
相关文章:

SpringBoot配置文件/日志
目录 一,SpringBoot配置文件 1,配置文件的格式: 2,properties 3,yml 1,properties与yml的转换 2,读取配置选哪个中的内容 3,单双引号的差异: 4,配置对象: 5,配置集合/配置map 6,yml的优缺点: 二,验证码: 学习目的: 实现样例: 接口定义: 代码总结: 三,日志: 1,概…...

微服务架构面试内容整理-SpringCloud Netflix与Spring Cloud Alibaba比较
Spring Cloud Netflix 和 Spring Cloud Alibaba 都是用于构建微服务架构的解决方案,但它们在设计理念、组件和使用场景上存在一些差异。以下是它们的比较: 1. 服务注册与发现 ● Spring Cloud Netflix:使用 Eureka 作为服务注册和发现的组件。Eureka 是基于 REST 的,适合服…...

JDBC魔法:连接MySQL数据库与数据操作的秘籍
文章目录 一. JDBC介绍二. 数据库驱动1.DriverManager2.Connection3.PreparedStatement4.ResultSet 三. JDBC连接MySQL1. 加载驱动2. 获得连接3. 关闭连接 四. JDBC实现数据新增五. JDBC实现数据删除 一. JDBC介绍 JDBC(Java Database Connectivity)是Ja…...

深入了解Scratch:引导初学者开启编程之旅
引言 在当今数字化时代,编程已不再是成年人的专利,而是一项逐渐向低年龄段普及的技能。Scratch作为一款面向儿童和青少年的图形化编程语言,以其简单易用且充满趣味性的特点,成为了许多初学者学习编程的首选工具。本文将深入探讨S…...

js复制内容到剪切板
复制内容到剪切板 最近预报一个需求需要点击按钮复制当前到行的内容到剪切板, 所以写了这个工具 export function copyText(text: string, prompt: string | null 已成功复制到剪切板!) {if (navigator.clipboard) {return navigator.clipboard.writeText(text).th…...

代码 RNN原理及手写复现
29、PyTorch RNN的原理及其手写复现_哔哩哔哩_bilibili 笔记连接: https://pan.baidu.com/s/1_Sm7ptEiJtTTq3vQWgOTNg?pwd2rei 提取码: 2rei import torch import torch.nn as nn bs,T2,3 # 批大小,输入序列长度 input_size,hidden_size 2,3 # 输入特征大小&a…...

企业官网的在线客服,如何提高效果?
企业官网的在线客服,如何提高效果? 作者:开源呼叫中心系统 FreeIPCC,github地址:https://github.com/lihaiya/freeipcc 提高企业官网在线客服的效果,是提升客户体验、增强客户满意度和忠诚度的关键。一个…...

「实战应用」如何可视化 DHTMLX Scheduler 中的资源工作量?
DHTMLX Scheduler是一个全面的 UI 组件,用于处理面向业务的 Web 应用程序中复杂的调度和任务管理需求。但是,某些场景可能需要自定义解决方案。例如,如果项目的资源(即劳动力)有限,则需要确保以更高的精度分…...

论文阅读《BEVFormer》
BEVFormer: Learning Bird’s-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers 目录 摘要1 介绍2 相关工作2.1 基于Transformer的2D感知 摘要 3D视觉感知任务对于自动驾驶系统至关重要,包括基于多相机图像的3D检测和地图分割。…...

sql专题 之 sql的执行顺序
文章目录 sql的执行顺序sql语句的格式实际的执行顺序:虚拟表 vs 数据集虚拟表 结果集总结嵌套查询在sql查询中的执行顺序 前文我们了解了sql常用的语句,这次我们对于这些语句来个小思索 戳这里→ sql专题 之 常用命令 sql的执行顺序 SQL语句的执行顺序是…...

Vue3 -- 基于Vue3+TS+Vite项目【项目搭建及初始化】
兼容性注意: Vite 需要 Node.js 版本 18+ 或 20+。然而,有些模板需要依赖更高的 Node 版本才能正常运行,当你的包管理器发出警告时,请注意升级你的 Node 版本。【摘抄自vite官网】 这里我用的node版本是 v18.20.2 创建项目: 创建项目我们可以使用npm、yarn、pnpm、bun …...

CTF-RE: TEA系列解密脚本
// // Created by A5rZ on 2024/10/26. //#ifndef WORK_TEA_H #define WORK_TEA_H#endif //WORK_TEA_H#include <cstdint> #include <cstdio>// 定义TEA加密算法的轮次,一般建议为32轮 #define TEA_ROUNDS 32 #define DELTA 0x9e3779b9// TEA加密函数 v…...

信号量和线程池
1.信号量 POSIX信号量,用与同步操作,达到无冲突的访问共享资源目的,POSIX信号量可以用于线程间同步 初始化信号量 #include <semaphore.h> int sem_init(sem_t *sem, int pshared, unsigned int value); sem:指向sem_t类…...

【人工智能】10分钟解读-深入浅出大语言模型(LLM)——从ChatGPT到未来AI的演进
文章目录 一、前言二、GPT模型的发展历程2.1 自然语言处理的局限2.2 机器学习的崛起2.3 深度学习的兴起2.3.1 神经网络的训练2.3.2 神经网络面临的挑战 2.4 Transformer的革命性突破2.4.1 Transformer的核心组成2.4.2 Transformer的优势 2.5 GPT模型的诞生与发展2.5.1 GPT的核心…...

「QT」几何数据类 之 QPointF 浮点型点类
✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…...

可能是全网第一个MySQL Workbench插件编写技巧
引言 应公司要求,数据库的敏感数据在写入到数据库中要进行加密,但是在测试环境查询数据的时候要手动解密,很不方便,有的时候数据比较多,解密比较麻烦。遂研究了一下如何通过 MySQL Workbench 的插件来实现查询数据一键…...

D62【python 接口自动化学习】- python基础之数据库
day62 SQL 基础 学习日期:20241108 学习目标:MySQL数据库-- 131 SQL基础和DDL 学习笔记: SQL的概述 SQL语言的分类 SQL的语法特征 DDL - 库管理 DDL - 表管理 总结 SQL是结构化查询语言,用于操作数据库,通用于绝大…...

探索美赛:从准备到挑战的详细指南
前言 美国大学生数学建模竞赛(MCM/ICM),简称“美赛”,是全球规模最大的数学建模竞赛之一。它鼓励参赛者通过数学建模来解决现实世界中的复杂问题,广受世界各地大学生的欢迎。本文将详细介绍美赛的全过程,从…...

IP地址查询——IP归属地离线库
自从网络监管部门将现实IP地址列入监管条例,IP地址的离线库变成网络企业发展业务的不可或缺的一部分,那么IP地址离线库是什么,又能够给我们带来什么呢? 什么是IP地址离线库? IP地址离线库是IP地址服务商将通过各种合…...

“倒时差”用英语怎么说?生活英语口语学习柯桥外语培训
“倒时差”用英语怎么说? “倒时差”,这个让无数旅人闻之色变的词汇,在英语中对应的正是“Jet Lag”。"Jet" 指的是喷气式飞机,而 "lag" 指的是落后或延迟。这个短语形象地描述了当人们乘坐喷气式飞机快速穿…...

Linux入门攻坚——37、Linux防火墙-iptables-3
私网地址访问公网地址的问题,请求时,目标地址是公网地址,可以在公网路由器中进行路由,但是响应报文的目的地址是私网地址,此时在公网路由器上就会出现问题。公网地址访问私网地址的问题,需要先访问一个公网…...

微服务架构面试内容整理-安全性-Spring Security
Spring Security 是 Spring 框架中用于实现认证和授权的安全模块,它提供了全面的安全解决方案,可以帮助开发者保护 Web 应用、微服务和 API 免受常见的安全攻击。以下是 Spring Security 的主要特点、工作原理和使用场景: 主要特点 1. 身份认证与授权: 提供多种认证方式,…...

新的服务器Centos7.6 安装基础的环境配置(新服务器可直接粘贴使用配置)
常见的基础服务器配置之Centos命令 正常来说都是安装一个docker基本上很多问题都可以解决了,我基本上都是通过docker去管理一些容器如:mysql、redis、mongoDB等之类的镜像,还有一些中间件如kafka。下面就安装一个 docker 和 nginx 的相关配置…...

深度学习:广播机制
广播机制(Broadcasting)是 PyTorch(以及其他深度学习框架如 NumPy)中的一种强大功能,它允许不同形状的张量进行逐元素操作,而不需要显式地扩展张量的维度。广播机制通过自动扩展较小的张量来匹配较大张量的…...

音视频入门基础:FLV专题(25)——通过FFprobe显示FLV文件每个packet的信息
音视频入门基础:FLV专题系列文章: 音视频入门基础:FLV专题(1)——FLV官方文档下载 音视频入门基础:FLV专题(2)——使用FFmpeg命令生成flv文件 音视频入门基础:FLV专题…...

Openstack7--安装消息队列服务RabbitMQ
只需要在控制节点安装 安装RabbitMQ yum -y install rabbitmq-server 启动RabbitMQ并设置开机自启 systemctl start rabbitmq-server;systemctl enable rabbitmq-server 创建 rabbitmq 用户 并设置密码为 000000 rabbitmqctl add_user rabbitmq 000000 如果你不慎创错了…...

day55 图论章节刷题Part07([53.寻宝]prim算法、kruskal算法)
前言:使用最小生成树的方法解决将所有节点连接起来所需的最小路径问题。 prim算法 Prim算法是一种贪心算法,从任意一个顶点开始构建最小生成树。每次选择当前已加入生成树的顶点中,距离最近的尚未加入生成树的顶点,直到所有顶点…...

LeetCode 93-复制 IP地址
题目链接:LeetCode93 欢迎留言交流,每天都会回消息。 class Solution {//定义结果集,返回最终结果List<String> rs new ArrayList<>();public List<String> restoreIpAddresses(String s) {//将字符串包装为可变长度的字…...

海底捞点单
单点锅底推荐: 番茄锅底通31 牛油麻辣通44 清汤麻辣备44 菌汤锅底通31 小吃&主食: 捞派捞面一黄金小馒头一茴香小油条 红糖枇杷一小酥肉 DIY锅底推荐: 1.寿喜锅:海鲜味酱4勺陈醋1勺蚝油2勺盐适量白糖7勺 芹菜1勺 2.麻辣锅底…...

It’s All About Your Sketch: Democratising Sketch Control in Diffusion Models
翻译: 摘要 本文揭示了草图在扩散模型中的潜力,解决了生成式人工智能中直接草图控制的虚假承诺。我们重要的是使这个过程更加普及,让业余的草图也能生成精确的图像,真正实现“你画的就是你得到的”。一项初步研究强调了这一研究的…...