SpringBoot学习笔记(二)
配置文件分类
SpringBoot中4级配置文件
1级:file:config/application.yaml 【最高】
2级:file:application.yml
3级:classpath:config/application.yml
4级:classpath:application.yml 【最低】
总结:
1.项目文件分为4种:
- 项目类路径配置文件:服务于开发人员本机开发于测试
- 项目类路径config目录种配置文件:服务于项目经理整体调控
- 工程路径配置文件:服务于运维人员配置涉密线上环境
- 工程路径config目录中配置文件:服务于运行经理整体调控
2.多层级配置文件间的属性采用叠加并覆盖的形式作用于程序
自定义配置文件
通过启动参数加载配置文件(无需书写配置文件扩展名)
Edit Configrations->Configuration->Program arguments
--spring.config.name=ebank
通过启动参数加载指定文件路径下的配置文件时可以加载多个配置
Edit Configrations->Configuration->Program arguments
--spring.config.location=classpath:/ebank.properties,classpath:/ebank-server.properties
自定义配置文件-重要说明
- 单服务器项目:使用自定义配置文件需求较低
- 多服务器项目:使用自定义配置文件需求较高,将所有配置放置在一个目录中,统一管理
- 基于SpringCloud技术,所有的服务器将不再设置配置文件,而是通过配置中心进行设定,动态加载配置信息
小结:
1.配置文件可以修改名称,通过启动参数设定
2.配置文件可以修改路径,通过启动参数设定
3.微服务开发中配置文件通过配置中心进行设置
总结:
1.SpringBoot在开发和运行环境均支持临时参数修改工程配置
2.SpringBook支持4级配置文件,应用于开发与线上环境进行配置的灵活设置
3.SpringBoot支持使用自定义配置文件的形式修改配置文件存储位置
4.基于微服务开发时配置文件将使用配置中心进行管理
多环境开发(yaml版)
spring:profiles:active: pro---
spring:profiles: proserver:port: 80---
spring:profiles: devserver:port: 81
---
spring:profiles: testserver:port: 82
spring:profiles:active: pro---
server:port: 80spring: 过时格式profiles: pro
spring:profiles:active: pro---
server:port: 80spring: 推荐格式config:activate:on-profiles: pro
总结:
多环境开发需要设置若干种常用环境,例如开发、生产、测试环境
多环境开发多文件版(yaml版)
多环境开发(YAML版)多配置文件格式
1.主启动配置文件application.yml
spring:profiles:active: dev
2.环境分类配置文件application-pro.yml
server:port: 80
3.环境分类配置文件application-dev.yml
server:port: 81
4.环境分类配置文件application-test.yml
server:port: 82
多环境开发配置文件书写技巧(一)
- 主配置文件中设置公共配置(全局)
- 环境分类配置文件中常用于设置冲突属性(局部)
多环境开发多文件版(properties版)
多坏境开发(Properties版)多配置文件格式
主启动配置文件application.properties
spring.profiles.active=pro
环境分类配置文件application-pro.properties
spring.port=80
环境分类配置文件application-dev.properties
spring.port=81
环境分类配置文件application-test.properties
spring.port=82
总结:
properties文件多环境配置仅支持多文件格式
多环境分组管理
多环境开发独立配置文件书写技巧(二)
根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下:
- application-devDB.yml
- application-devRedis.yml
- application-devMVC.yml
使用include属性再激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔
spring:profiles:active: devinclude: devDB,devRedis,devMVC
配置文件加载顺序:devDB,devRedis,devMVC,dev 后面的配置文件覆盖前面的配置文件
注意事项
当主环境dev与其他环境有相同属性时,主环境属性生效;其他环境中有相同属性时,最后加载的环境属性生效
从SpringBoot2.4版开始使用group属性替代include属性,降低了配置书写量
使用group属性定义多种主环境与子环境的包含关系
spring:profiles:active: devgroup:"dev": devDB,devRedis,devMVC"pro": proDB,proRedis,proMVC"test": testDB,testRedis,testMVC
配置文件加载顺序:devDB,devRedis,devMVC
总结:
多环境开发使用froup属性设置配置文件分组,便于线上维护管理
多环境开发控制
Maven与SpringBoot多环境兼容
1.maven中设置多环境属性
<profiles><profile><id>dev_env</id><properties><profile.active>dev</profile.active></properties><activation><activeByDefault>true</activeByDefault></activation></profile><profile><id>pro_env</id><properties><profile.active>pro</profile.active></properties></profile><profile><id>test_env</id><properties><profile.active>pro</profile.active></properties></profile>
</profiles>
2.SpringBoot中引用Maven属性
spring:profiles:active: @profile.active@"dev": devDB,devMVC"pro": proDB,proMVC
3.执行Maven打包指令,并在生产的boot打包文件.jar文件中查看对应信息
总结:
1.当Maven与SpringBoot同时对多环境进行控制时,以Maven为主,SpringBoot使用@…@占位符读取Maven对应的配置属性值
2.基于SpringBoot读取Maven配置属性的前提下,如果在Idea下测试工程时pom.xml每次更新需要手动compile方可生效
日志
日志基础
步骤:代码中使用日志工具记录日志
1.Maven设置多环境属性
@RestController
@RequestMapping("/books")
public class BookController extends BaseController {private static final Logger log = LoggerFactory.getLogger(BookController.class);@GetMappingpublic String getById(){System.out.println("springboot is running...");log.debug("debug...");log.info("info...");log.warn("warn...");log.error("error...");return "springboot is running...";}
}
2.设置日志输出级别
# 开启debug模式,输出调试信息,常用于检查系统运行状况
debug: true# 设置日志级别,root表示根节点,即整体应用日志级别
logging:level:root: debug
3.设置日志组,控制指定包对应的日志输出级别,也可以直接控制指定包对应的日志输出级别
logging:# 设置日志组group:# 自定义组名,设置当前组中所包含的包ebank: com.luxifa.controllerlevel:root: warn# 为对应组设置日志级别ebank: debug# 为对应包设置日志级别com.luxifa.controller: debug
总结:
1.日志用于记录开发调试与运维过程消息
2.日志的级别共6种,通常使用4种即可,分别是DEBUG,INFO,WARN,ERROR
3.可以通过日志组或代码包的形式进行日志显示级别的控制
快速创建日志对象
使用lombok提供的注解@Slf4j简化开发,减少日志对象的声明操作
@Slf4j
@RestController
@RequestMapping("/books")
public class BookController {@GetMappingpublic String getById() {System.out.println("springboot is running...");log.debug("debug info...");log.info("info info...");log.warn("warn info...");log.error("error info...");return "springboot id running...";}
}
总结:
基于lombok提供的@Slf4j注解为类快速添加日志对象
日志输出格式控制
2023-02-20 16:39:40.334 INFO 2336 --- [ main] com.luxifa.SpringbootLogApplication Started SpringbootLogApplication in 1.281 seconds(JVM...)
2023-02-20 16:39:40.334 : 时间
INFO:级别
2336:PID 进程ID,用于表明当前操作所处的进程,当多服务同时记录日志时,该值可用于协助程序员调试程序
main:所属线程
com.luxifa.SpringbootLogApplication:所属类/接口名 当前显示信息为SpringBoot重写后的信息,名称过长时,简化包名书写为首字母,甚至直接删除
Started SpringbootLogApplication in 1.281 seconds(JVM…):日志信息
设置日志输出格式
logging:pattern:console: "%d - %m%n"
- %d”: 日期
- %m:消息
- %n:换行
logging:pattern:console: "%d %clr(%p) --- [%16t] %clr(%-40.40c){cyan} : %m %n"
总结:
日志输出格式设置规则
日志文件
文件记录日志(运维实用)
设置日志文件
logging:file:name: server.log
日志文件详细配置
loging:file:name: server.loglogback:rollingpolicy:max-file-size: 3KBfile-name-pattern: server.%d{yyyy-MM-dd}.%i.log
总结:
1.日志记录到文件
2.日志文件格式配置
热部署
手动启动热部署
开启开发者工具
<denpendency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional>
</denpendency>
激活热部署:Ctrl+F9 或者 Build->Build Project
关于热部署
- 重启(Restart):自定义开发代码,包含类、页面、配置文件等,加载位置restart类加载器
- 重载(Reload):jar包,加载位置base类加载器
总结:
1.开启开发者工具后启用热部署
2.使用构建项目操作启动热部署(Ctrl+F9)
3.热部署仅仅加载当前开发者自定义开发的资源,不加载jar资源
自动启动热部署
步骤:
1.setting->Build,Excution,Deployment->Compiler->Build project automaticaly 勾选
2.Ctrl+Alt+Shift+/ 快捷键 然后在弹出的页面中 Registry->compiler.automake.allow.when.app.running 勾选
激活方式:Idea失去焦点5秒后启动热部署
热部署范围配置
默认不触发重启的目录列表
- /META-INF/maven
- /META-INF/reesources
- resources
- static
- public
- templates
自定义不参与重启排除项
devtools:restart:# 设置不参与热部署的文件或文件夹excude: public/**,static/**
关闭热部署
方式一:
devtools:restart:# 设置不参与热部署的文件或文件夹excude: public/**,static/**,config/application.ymlenbled:false
方式二:
设置高优先级属性禁用热部署
public static void main(String[] args) {System.setProperty("spring.devtools.restart.enabled","false");SpringApplication.run(SSMPAllication.class);
}
配置高级
@Confiturationproperties
使用@ConfigurationProperties为第三方绑定属性
application.yml中:
datasource:driverClassName: com.mysql.jdbc.Driver123
主程序:
@SpringBootApplication
public class SpringbootConfigurationApplication {@Bean@ConfigurationProperties(prefix = "datasource")public DruidDataSource datasource(){DruidDataSource ds = new DruidDataSource();return ds;}public static void main(String[] args) {ConfiguravleApplicationContext ctx = SpringApplication.run(SpringbootConfigurationApplication.class,args);DruidDataSource ds = ctx.getBean(DruidDataSource.class);System.out.println(ds);}
}
控制台:
com.mysql.jdbc.Driver123
@EnableConfigurationProperties注解可以将使用@ConfigurationProperties注解对应的类加入Spring容器
application.yml中:
servers:ipAddress: 192.168.0.1port: 2848timeout: -1
//Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {private String ipAddress;private int port;private long timeout;
}
@SpringBootApplication
@EnableConfigurationProperties(ServerConfig.class)
public class DemoApplication {public static void main(String[] args) {ConfigurableApplicationContext ctx = SpringApplication.run(SpringbootApplication.class,args);}}
注意事项:
@EnableConfigurationProperties与@Component不能同时使用
解除使用@ConfigurationProperties注释警告
Spring Boot Configuration Annotation Processor not configuref Open Docementation...
pom.xml中添加如下依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
宽松绑定/松散绑定
@ConfigurationProperties绑定属性支持属性名宽松绑定
不管是驼峰模式、下划线模式、中划线模式、常量模式都能绑定
驼峰模式:
servers:ipAddress: 192.168.1.1port: 2345timeout: -1
下划线模式:
servers:ip_address: 192.168.1.1port: 2345timeout: -1
中划线模式:
servers:ip-address: 192.168.1.1port: 2345timeout: -1
常量模式:
servers:IP_ADDRESS: 192.168.1.1port: 2345timeout: -1
//Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {private String ipAddress;private int port;private long timeout;
}
@SpringBootApplication
@EnableConfigurationProperties(ServerConfig.class)
public class SpringbootConfiurationApplication {public static void main(String[] args) {SpringApplication.run(SpringbootConfigurationApplication.class,args);}
}
注意事项:
宽松绑定不支持注解@Value引用单个属性的方式
@ConfigurationProperties(prefix = “servers”) 绑定前缀命名规范:仅能使用纯小写字母、数字、下划线作为合法的字符
总结:
1.@ConfigurationProperties绑定属性支持属性名宽松绑定
2.@value注解不支持松散绑定
3.绑定前缀命名规则
常用计量单位绑定
常用计量单位
SpringBoot支持JDK8提供的时间与空间计量单位
servers:ipAddress: 192.168.0.2port: 2345timeout: -1serverTimeOut: 3dataSize: 10
@Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {private String ipAddress;private int port;private long timeout;@DurationUnit(ChronoUnit.MINUTES)private Duration serverTimeOut;@DataSizeUnit(DataUnit.MEGABYTES)private DataSize dataSize;
}
数据校验
bean属性校验
步骤:开启Bean数据校验
servers:ipAddress: 192.168.0.2port: 2345timeout: -1
1.添加JSR303规范坐标与Hibernate校验框架对应坐标
<dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId>
</dependency><dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId>
</dependency>
2.对Bean开启校验功能
@Component
@Data
@ConfigurationProperties(prefix = "servers")
@Validated
public class ServerConfig {private String ipAddress;private int port;private long timeout;
}
3.设置校验规则
@Component
@Data
@ConfigurationProperties(prefix = "servers")
@Validated
public class ServerConfig {@Max(value = 400,message = "最大值不能超过400")private String ipAddress;private int port;private long timeout;
}
总结:
启动Bean属性校验
- 导入JSR303与Hibernate校验框架坐标
- 使用@Validated注解启动校验功能
- 使用具体校验规则范数据校验格式
相关文章:

SpringBoot学习笔记(二)
配置文件分类 SpringBoot中4级配置文件 1级:file:config/application.yaml 【最高】 2级:file:application.yml 3级:classpath:config/application.yml 4级:classpath:application.…...

亚马逊云科技SageMaker:实现自动、可视化管理迭代
现如今,AI正在成为跨时代的技术,在数字经济发展中登上舞台,发挥关键作用。在Gartner发布的《2022年新兴技术成熟度曲线》*报告中,AIGC(即AI Generated Content,人工智能自动生成内容)被列为2022…...

汽车 Automotive > CAN Transceivers收发器选择
参考:https://www.nxp.com/products/interfaces/can-transceivers/3-3-v-5-v-io-can-transceivers:33VIO-CAN3.3 V / 5V IO CAN收发器组合TJA1042高速CAN收发器,具有待机模式,适用于所有类型的高速CAN网络,在需要低功耗模式的节点…...

AI将如何影响程序员的未来,以及如何不被AI所替代。
随着人工智能技术的不断发展,越来越多的工作被自动化和智能化所取代,其中程序员这个职业也不例外。然而,我们需要客观地分析AI在未来对程序员的影响,并且给出建议,以便程序员能够保持竞争力,不被AI所取代。…...

nginx 常用配置之 pass_proxy
大家好,我是 17。 今天和大家聊聊 pass_proxy 代理。 pass_proxy 代理 在前端代理主要是为了跨域。虽然前端跨域有多种方法,各有利弊,但用代理来跨域对开发是最友好的。用代理可以不用修改产品代码切换线上线下,非常安全。pass…...

Linux中驱动模块加载方法分析
如何管理驱动模块 由于Linux驱动模块众多,系统对模块加载顺序有要求,一些基础模块在系统启动时需要很早就被加载;开发者加入自己的模块时,需要维护一个模块初始化列表,上面两方面的做起来很困难,为了科学地…...

yarn 通过 resolutions,指定子孙依赖包版本号,解决froala-editor 版本问题
前端开发项目过程中会使用到各种依赖包。但是这些依赖包虽然好用,但是一味使用最新版本可能会出现各种奇葩问题,因此我们经常会针对一些依赖包指定一个稳定版本。 常用版本 版本号注释“1.0.2”必须切到1.0.2版“>1.0.2”必须大于1.0.2版“>1.0.…...

Elasticsearch7.8.0版本进阶——多文档操作流程
目录一、多文档操作1.1、多文档操作的概述1.2、多文档操作与单文档模式区别二、用单个 mget 请求取回多个文档2.1、用单个 mget 请求取回多个文档的图解2.2、用单个 mget 请求取回多个文档的步骤三、bulk API 的模式请求取回多个文档3.1、bulk API 的模式请求取回多个文档的图解…...

Scala函数式编程(第五章:函数基础、函数高级详解)
文章目录第 5 章 函数式编程5.1 函数基础5.1.1 函数基本语法5.1.2 函数和方法的区别5.1.3 函数定义5.1.4 函数参数5.1.5 函数至简原则(重点)5.2 函数高级5.2.1 高阶函数5.2.2 匿名函数5.2.3 高阶函数案例5.2.4 函数柯里化&闭包5.2.5 递归5.2.6 控制抽…...

ZED相机快速使用指南
1、安装SDK ZED SDK 3.8 - Download | Stereolabs 2、安装ros GitHub - stereolabs/zed-ros-wrapper: ROS wrapper for the ZED SDK 其他教程:ZED2相机SDK安装使用及ROS下使用_可即的博客-CSDN博客 3、官方文档 Get Started with ZED | Stereolabs 4、标定参…...

树莓派4b配置OpenWrt联网
文章目录前言一、下载固件二、配置wan口三、简单介绍1、修改无线名称、设置密码2、下载软件包总结前言 树莓派4b内置wifi模块,加一个千兆网口 好像有一种办法,通过无线wifi链接其他wifi通网,然后把这个网口作为lan口,连接电脑使…...

不同语言下的定时器,你都掌握了吗?
我们大家都对定时器不陌生,无论是现实中还是项目中,都离不开定时。在现实中,它叫闹钟,在项目上,它叫定时器,即定时触发某件事情。它能帮助我们在某一个既定的时间节点上,来提醒我们做一些事情&a…...

华为OD机试 - 水仙花数(Python) | 机试题+算法思路+考点+代码解析 【2023】
水仙花数 题目 所谓的水仙花数是指一个n位的正整数其各位数字的n次方的和等于该数本身, 例如153 = 1^3 + 5^3 + 3^3,153是一个三位数 输入 第一行输入一个整数N, 表示 N 位的正整数 N 在3-7之间包含3,7 第二行输入一个正整数M, 表示需要返回第M个水仙花数 输出描述 返…...

在onBindViewHolder设置View的translation失败或错乱的问题
这个问题,可以换成“为什么在onCreate里面修改一些子View不生效,错位,乱”等问题。 本质原因肯定是在没有把整个ViewGroup渲染完成之前,操作了部分子View,导致了位置偏移等。 解决办法也很简单,通过调用Vi…...

【2.21】MySQL索引、动态规划、学习方法
索引常见面试题 什么是索引 索引的定义就是帮助存储引擎快速获取数据的一种数据结构,形象的说就是索引是数据的目录。存储引擎,说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。索引和数据就是位于存储引擎。…...

华为OD机试题 - 二叉树层次遍历(JavaScript)| 包含代码编写思路
最近更新的博客 华为OD机试题 - 字符串加密(JavaScript) 华为OD机试题 - 字母消消乐(JavaScript) 华为OD机试题 - 字母计数(JavaScript) 华为OD机试题 - 整数分解(JavaScript) 华为OD机试题 - 单词反转(JavaScript) 华为OD机试题 最近更新的博客使用说明二叉树层次遍…...

力扣解法汇总1140. 石子游戏 II
目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描述: 爱丽丝和鲍勃继续他们的石子游戏。许多堆石子 排成一行,每堆都有正整…...

Kerberos认证原理与使用教程
Kerberos认证原理与使用教程 一、Kerberos 概述 二、什么是 Kerberos Kerberos 是一种计算机网络认证协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。软件设计上采用客户端…...
内存取证常见例题思路方法-volatility (没有最全 只有更全)
目录 1.从内存文件中获取到用户hacker 的密码并且破解密码,将破解后的密码作为 Flag值提交; 2.获取当前系统的主机名,将主机名作为Flag值提交; 3.获取当前系统浏览器搜索过的关键词,作为Flag提交; 4.获取当前内存文件的 ip地址 5.当前系…...

10 种主数据模型设计示例分享,推荐收藏
主数据模型是主数据管理的基础,一个完整的、可扩展的、相对稳定的主数据模型对于主数据管理的成功起着重要的作用。规划、创建主数据模型的过程,是梳理主数据管理体系的过程,目的是建立一个良好的资源目录结构,划分合理的资源粒度…...

React学习笔记
React学习笔记 概述 React是用于构建用户界面的JavaScript库。 现在前端领域最为流行的三大框架: VueReactAngular 其中,Vue和React是国内最为流行的两个框架。 React的特点: 1、声明式编程:它允许我们只需要维护自己的状态…...

【Vue源码解析】Vue虚拟dom和diff算法
Vue虚拟dom和diff算法1. 简介2. 搭建环境1. 安装snabbdom2. 安装webpack5并配置3、函数3.1 虚拟节点vnode的属性3.2 使用h函数 创建虚拟节点3.3 使用patch函数 将虚拟节点上DOM树3.4 h函数嵌套使用,得到虚拟DOM树(重要)3.5 patchVnode函数3.6…...

算法学习与填充计划---2023.2.21---夏目
🚀write in front🚀 📝个人主页:认真写博客的夏目浅石.CSDN 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:ACM周训练题目合集.CSDN 💬总结:…...

JavaScript中怎么实现链表?
JavaScript中怎么实现链表? 学习数据结构的的链表和树时,会遇到节点(node)这个词,节点是处理数据结构的链表和树的基础。节点是一种数据元素,包括两个部分:一个是实际需要用到的数据;…...

多孔弹性材料中传播的膨胀波方法(Matlab代码实现)
👨🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…...

时间复杂度与空间复杂度
目录一、算法的复杂度二、时间复杂度2.1 什么叫时间复杂度2.2 大O的渐进表示法2.3 计算时间复杂度的练习三、空间复杂度四、常见复杂度的对比一、算法的复杂度 算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏…...

UDP报文详解
目录 🐳今日良言:走好选择的路,别选择好走的路,你才能拥有真正的自己。 🐼一、UDP协议特点 🐼二、UDP协议段格式详解 🐳今日良言:走好选择的路,别选择好走的路,你才能拥有真正的自…...

C#开发的OpenRA的NextPowerOf2
C#开发的OpenRA的NextPowerOf2 在游戏里,经常需要对计算资源进行优化。 比如屏幕的大小,以及缓冲区的大小,还有纹理的大小。 由于计算机都是基于二进制的原理,那么它的最快计算速度,就是让计算的数字都是2的n次方。 基于此策略,在程序里就需要计算出来最接近2的n次方的数…...

CDH 6.3.2启用HDFS高可用
启用原因 CDH 6.3.2平台即将用于生产,生产平台几乎需要高可用平台,故需要升级CDH中的HDFS为HA。 启用准备 CDH已经成功安装并正常使用CMS的管理员账号正常登陆 HDFS启用HA 登陆CMS系统->选择HDFS服务->点击进入到HDFS服务详情页面,…...

多服务器节点访问解决一人一单问题+redis设置锁方案
项目地址及项目具体介绍-码云仓库:https://gitee.com/flowers-bloom-is-the-sea/distributeNodeSolvePessimisticLockByRedis 测试1: 这里使用jmeter同时启动2各线程: 原来的数据库表的数据: goods的数据是: id …...