SpringBoot:yml文件详解

article/2025/8/30 21:09:29

目录

获取数据第三种方式

多环境配置

日志打印

过滤器与拦截器的配置

过滤器配置:

拦截器的配置

全局异常处理器


获取数据第三种方式

数据可能是一个对象形式, 不需要一个一个获取, 定义一个对应的类, 要求属性与yml的数据的二级属性名一样, 使用springboot提供的注解@ConfigurationProperties,进行属性与yml数据的一一映射

 

多环境配置

三个环境:

开发环境: dev

测试环境: test

生产环境: prod

每个环境不同的配置,分开写, 相同的配置集中.

yml多环境配置:

第一种方式: 单个文件 application.yml的多环境配置

#全局配置文件: application.yml
#共同的配置,写在全局配置文件中
spring:application:name: demo4profiles:active: prod
​
#激活某个环境: 使用那个环境
​
​
---
# 某个环境的配置文件
#给环境取名字  开发环境:  dev
spring:profiles: dev
#环境的配置
server:port: 8080
​
---
# 某个环境的配置文件
#测试环境  test
spring:profiles: test
server:port: 9090
​
---
# 某个环境的配置文件
#生产环境 prod   pro
spring:profiles: prod
server:port: 80

注意: 在Springboot高版本中, 定义环境名的配置已过时

#低版本
spring:
profiles: prod

在高版本变为:

#高版本
spring:
config:
activate:on-profile: test

第二种方式: 多个yml文件多环境配置

环境配置文件名: application-环境名.yml

 

Properties类型的配置文件多环境配置

多个properties文件多环境配置

 

日志打印

默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台

 

logback,log4j,log4j2 都是同一个人开发, log4j --> log4j2 --> logback(分布式日志)

设置日志输出级别:

第一种方式:

# 开启debug模式,输出调试信息,常用于检查系统运行状况, 自己的日志还是info级别
debug: true

第二种方式:

# 设置日志级别,root表示根节点,即整体应用日志级别
logging:level:root: debug

第三种方式: 推荐

#单独控制某个包下的日志输出级别
#设置整个项目日志输出级别
logging:#设置一个组group:demo4: com.fslevel:root: info#com.fs包的日志输出级别为debugdemo4: debug

日志写到控制台, 在开发日志直接打印控制台,但是,测试,生产环境, 日志 保存到日志文件中

第一种方式: 所有的日志保存到一个日志文件:

logging:file:#保存当前项目下name: suke.log

问题:

  1. 日志内容大, 打开很慢, 写也慢

  2. 不方便查找某一天的日志

  3. 日志无法归档

第二种方式: 每一天产生一个日志文件, 限制每个日志文件大小, 超出,新创建一个文件

对Logback日志专门编写一个配置文件, logback-自定义名.xml 推荐使用名

除了: logback-logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,比如: 如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds" debug="false">
<!-- 日志路径 部署在服务器 文件夹需要设计777权限linux服务器: 根目录: /    设置目录访问权限目录不存在,创建目录
-->
<property name="log.base" value="C://logs/suke"/>
<!--日志存储天数-->
<property name="log.max.days" value="30"/>
<!-- 日志文件大小 -->
<property name="log.max.size" value="500MB"/>
<!-- 输出格式-->
<property name="log.pattern" value="%date{ISO8601} %level [%thread] %logger{56} : %msg%n"/>
<!--字符集-->
<property name="log.charset" value="UTF-8"/>
​
<!--控制台-附加器 -->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"><!--格式 --><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${log.pattern}</pattern><charset>${log.charset}</charset></encoder>
</appender>
​
<!--info-附加器-->
<appender name="infoFile" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.base}/info/_info.log</file><!--存储路径--><!-- 输出格式 --><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${log.pattern}</pattern><charset>${log.charset}</charset></encoder><!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。--><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!--按天回滚--><fileNamePattern>${log.base}/info/archive/info_%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern><!--日志最大存储天数--><maxHistory>${log.max.days}</maxHistory><!--当天的日志 超过大小 压缩日志并保存 --><maxFileSize>${log.max.size}</maxFileSize></rollingPolicy><!--过滤器,只记录INFO级别的日志--><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>INFO</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter>
</appender>
​
<!--warn-附加器-->
<appender name="warnFile" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.base}/warn/_warn.log</file><!--存储路径--><!--输出格式--><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${log.pattern}</pattern><charset>${log.charset}</charset></encoder><!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。--><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${log.base}/warn/archive/warn_%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern><!--日志最大存储天数--><maxHistory>${log.max.days}</maxHistory><!-- 当天的日志 超过大小 压缩日志并保存 --><maxFileSize>${log.max.size}</maxFileSize></rollingPolicy><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>WARN</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter>
</appender>
​
<!--error-附加器-->
<appender name="errorFile" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.base}/error/_error.log</file><!--存储路径 --><!--输出格式--><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${log.pattern}</pattern><charset>${log.charset}</charset></encoder><!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。--><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${log.base}/error/archive/error_%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern><!--日志最大存储天数--><maxHistory>${log.max.days}</maxHistory><!-- 当天的日志 超过大小 压缩日志并保存 --><maxFileSize>${log.max.size}</maxFileSize></rollingPolicy><!--级别-过滤器 error--><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter>
</appender>
​
<!-- 为某个包下的所有类的指定Appender 这里也可以指定类名称例如:com.aa.bb.ClassName -->
<!--<logger name="org.springframework.aop.framework.CglibAopProxy" additivity="false"><level value="info" /><appender-ref ref="stdout" />
</logger>-->
<logger name="com.fs" additivity="false"><level value="debug" /><appender-ref ref="stdout" /><!--<appender-ref ref="infoFile" />-->
</logger>
<!-- root将级别为“DEBUG”及大于“DEBUG”的日志信息交给已经配置好的名为“Console”的appender处理,“Console”appender将信息打印到Console -->
<root level="info"><appender-ref ref="stdout" /> <!-- 标识这个appender将会添加到这个logger --><appender-ref ref="infoFile" /><appender-ref ref="warnFile" /><appender-ref ref="errorFile" />
</root>
</configuration>
  1. 在application.yml文件中指定logback的配置文件

  #指定logback的配置文件logging:config: classpath:logback-demo4.xml

注意:

spring boot默认会加载classpath:logback-spring.xml或者classpath:logback-spring.groovy或者:classpath:logback.xml

过滤器与拦截器的配置

过滤器配置:

 

第一种方式: 使用web3.0的注解方式: @WebFilter, javaWeb学习的

 

需要让我们的springboot扫描这个注解, 以javaWeb的注解:

在启动类, 使用@ServletComponentScan注解

 

第二种方式: 配置类

@SpringBootConfiguration
public class JavaWebConfig {
​//配置过滤器@Beanpublic FilterRegistrationBean<AFilter> configAFilter(){FilterRegistrationBean<AFilter> filterFilterRegistrationBean = new FilterRegistrationBean<>();//把过滤器对象设置给FilterRegistrationBeanfilterFilterRegistrationBean.setFilter(new AFilter());//过滤器的配置//设置过滤器拦截的urlfilterFilterRegistrationBean.addUrlPatterns("/*");//设置过滤器名字filterFilterRegistrationBean.setName("AFilter");//设置过滤器的执行顺序filterFilterRegistrationBean.setOrder(1);return filterFilterRegistrationBean;}
}

拦截器的配置

只能通过配置类进行配置

拦截器是属于SpringMVC的技术, SpringBoot 对SpringMVC提供自动配置类,我们不能配置一个springMVC的配置类,替换我们自动配置类,

配置类实现WebMvcConfigurer接口

​
@SpringBootConfiguration
public class MyWebMvcConfigretion implements WebMvcConfigurer {
//配置拦截器
​
@Override
public void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new AInterceptor()).addPathPatterns("/**").excludePathPatterns("/testLog");
​
​
}
}
​

全局异常处理器

基于AOP的异常增强: @ControllerAdvice

步骤:

1.新建一个全局的异常类

2.在class上添加注解,@ControllerAdvice

3.在class中添加一个方法

4.在方法上添加@ExceptionHandler拦截相应的异常

5.如果返回的是View ---方法的返回值是ModelAndView

6.如果返回的是String或者是JSON数据,那么需要在方法上添加@ResponseBody注解

@ControllerAdvice  //Controller的增强类
public class GlobalDefaultExceptionHandler {
​//这个方法处理Controller[抛出所有的异常类型@ExceptionHandler(Exception.class)public String handleException1(Exception ex){return ex.getMessage();}
​/* @ExceptionHandler(RuntimeException.class)public String handleException2(Exception ex){return ex.getMessage();}*/
}

http://chatgpt.dhexx.cn/article/rf8s9Mqs.shtml

相关文章

qq图

最近在做关联分析的时候&#xff0c;研究了一下QQ图的绘制方法 QQ图的全称是Quantile-Quantile plot图&#xff0c;主要用于去判断某一系列的值是否符合正态分布&#xff0c;横坐标是理论值&#xff0c;纵坐标是实际值&#xff0c;当纵坐标和横坐标的坐标值相同的时候&#xf…

如何关掉 PC QQ 烦人的 QQ 频道

QQ 频道被 QQ 强制捆绑, 很多人用不到, 而且还不能完全免打扰, 点击消息的时候, QQ 频道就会跳出来, 非常的烦人. 步骤 关闭掉 QQ. 然后找到 QQ 频道的本体目录: 使用 %LOCALAPPDATA%\Tencent 可以快速跳转到这里 打开文件夹属性, 转到 “安全” 选项卡, 然后点击 “高级” …

python 给QQ好友定时发送消息

python 给QQ好友定时发送消息 前言初衷代码效果后记 前言 在小编的上一篇python文章中提到了关于微信或者QQ的消息“轰炸”&#xff08;其实我是想你也去看看&#xff0c;23333 [狗头保命]&#xff09;&#xff0c;那是简单版本&#xff0c;今天我要讲的是&#xff0c;发送消息…

QQ再次被大规模盗号

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; QQ被大规模盗号已经不是一次两次了&#xff0c;感觉腾讯好像没有太好的解决办法。 昨天(周日)QQ又出下了大规模盗号情况&#xff1a;大量用户反馈称遇到了自己或是身边的朋友、家人、同事等被盗号…

SpringBoot整合定时任务和邮件发送(邮箱 信息轰炸 整蛊)

SpringBoot整合定时任务和邮件发送&#xff08;邮箱 信息轰炸 整蛊&#xff09; 目录 SpringBoot整合定时任务和邮件发送&#xff08;邮箱 信息轰炸 整蛊&#xff09;1.概述2.最佳实践2.1创建项目引入依赖(mail)2.2 修改yml配置文件2.3 启动类添加EnableScheduling注解2.4 执行…

让对方qq崩溃的代码2020_为什么都瞧不起QQ邮箱?

“我真他妈受够公路商店了&#xff01;” 某部门的某大哥抱怨自己一天到晚被办公室的烟熏的眼睛都睁不开&#xff0c;无论如何都要跳槽到一个起码能供应自然氧气的公司。 但当我从背后偷偷瞄了一眼他的电脑&#xff0c;发现他认认真真的用QQ邮箱起草了一份简历&#xff0c;我就…

QQ防撤回

QQ防撤回 版本截图 收集信息 这一步非常关键,因为在分析时,思路如果不对,基本上是分析不出来的,这里我们从敏感字符串开始。先搜一搜撤销的英文单词 如图知道了好几个单词,锁定关键字一个一个使用Notepad++的搜索功能,再文件中搜索。 查看搜索结果,发现又两个和消…

揭秘:QQ盗号背后的产业链,惊人的暴利!

最好的欺骗手段&#xff0c;莫过于让其信任的人、事、物蒙蔽判断&#xff0c;待到入圈之时&#xff0c;便是案板上的肉。 你所看到的、想到的、听到的、闻到的、摸到的&#xff0c;是否是别人有意让你看到、听到、闻到、摸到、想到&#xff1f; 人最大的错误就是看所看、想所…

QQ群怎么快速封群,如何举报骗子QQ群可以使之封群?

QQ群是个开放式的交流平台&#xff0c;充斥着各色各样的人和行业&#xff0c;不少人都被一些表面光鲜亮丽&#xff0c;背地乌烟瘴气的QQ群吸引过&#xff0c;直到出问题的时候才知道为时已晚。 以目前腾讯的审核力度来看&#xff0c;正常举报&#xff0c;封群是极其困难的&…

不再害怕打字慢(python信息轰炸)

不知道各位小伙伴有没有这样的烦恼&#xff1a;在和自己的朋友聊天的时候&#xff0c;自己无论是使用九键还是26键&#xff0c;都没有他们打字快&#xff1b;双方进行信息轰炸的时候&#xff0c;更没有他们快了。下面这篇文章将会解决这个烦恼。话不多说&#xff0c;直接上才艺…

【用python写一个简易的消息轰炸代码】

用python写一个简易的消息轰炸代码 前言一、思路讲解二、使用步骤1.引入库2.完整代码 总结 前言 有没有在qq&#xff0c;微信想用一句话不停怼一个人&#xff0c;这篇文章教你在回车能发送消息的一系列软件中&#xff0c;快速多次发送你想发的话。 一、思路讲解 1.定位输入框…

qq消息连发脚本

这是我闲的没事&#xff0c;在网上学的&#xff0c;虽然功能比较单一&#xff0c;只能重复发一个信息&#xff0c;但闲得无聊可以抖一抖好你的基友【doge】 代码如下&#xff1a; #include<iostream> #include<windows.h> using namespace std;int main() {int t…

基于python的消息轰炸

首先我们需要安装pyautogui调用库 在命令提示符中输入pip install pyautogui 然后我们需要得到需要轰炸的对话框的坐标 在pycharm中输入以下代码 import pyautogui# 导入库 print(pyautogui.position()) # 显示鼠标的x,y位置 打开对话框 运行 鼠标放在要轰炸的对话框上 记…

屏幕控制实现消息发送以及轰炸

最近突然想做一个QQ消息发送实现&#xff0c;查找了很多资料找不到相应的库&#xff0c;最后在一个博客中看到屏幕控制。 下面就是通过屏幕控制实现的消息发送即轰炸 import pyautogui # 鼠标 import pyperclip # 粘贴板 import time # 延时# words input(请输入轰炸的内容…

【修改】对“C语言实现轰炸代码”进行修改和完善

场景&#xff1a; 使用C语言实现“轰炸”效果&#xff0c;就是多条重复表情或信息的发送&#xff1b;使用场景是在QQ上面。 问题描述 1.不兼容&#xff0c;对于VS2022或者其他VS编译器无法实现效果。 2.代码能正常运行但无法弹出窗口进行发信息。 原因分析&#xff1a; 1.不…

Python实现消息轰炸效果,从入门到进阶

本期小编给大家带来的内容是&#xff1a;使用Python实现消息轰炸效果&#xff0c;消息轰炸的用途这里小编就不再赘述&#xff0c;老样子直接进入正题&#xff01; 要实现消息轰炸效果&#xff0c;首先要借助Python第三方库-pyautogui&#xff0c;原理很简单就是识别光标位置&am…

VBS QQ微信消息轰炸

今天给大家介绍一下&#xff0c;简单的微信QQ消息轰炸脚本&#xff0c;会使用电脑即可&#xff1b;慎用&#xff0c;后果自负&#xff01;使用方法如下&#xff1a; 一、在电脑上新建一个文本文档&#xff0c;命名随意。 二、将以下代码复制到文本文档中并保存&#xff0c;代码…

第四天 游戏策划学习

摸鱼了太久&#xff0c;今天来学习下回合制战斗的乱敏机制的作用和本质 首先什么是乱敏&#xff1a; 就是指敌我双方如果在一个速度区间内&#xff0c;并不是按照速度的绝对高低来决定出手顺序&#xff0c;而且有一定的几率&#xff0c;速度慢的角色会比速度快的角色先出手。…

游戏数值策划属性篇(一):关于属性设计的几点思考

摘要: 本文转载自: http://www.cocoachina.com/game/20150906/13333.html(只作转载, 不代表本站和博主同意文中观点或证实文中信息) “属性”从何而来&#xff0c;终归何处&#xff1f;在整个游戏设计中笔者围绕着这个问题展开思考.....  一、关于属性设计思想的几点思考  …

一个游戏数值策划的自白:我所理解的数值工作

http://www.gameres.com/456687.html 5 天前 上传 下载附件 (189.15 KB) GameRes游资网授权发布 文 / 张锋 关于游戏数值我只想说&#xff1a;数值不是你想象的那么简单&#xff01; 下面具体说说我对数值工作的想法。 1&#xff09;不要随大流。 例如&#xff0c;很多人就认…