当前位置: 首页 > news >正文

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级&#xff1a;file&#xff1a;config/application.yaml 【最高】 2级&#xff1a;file&#xff1a;application.yml 3级&#xff1a;classpath&#xff1a;config/application.yml 4级&#xff1a;classpath&#xff1a;application.…...

亚马逊云科技SageMaker:实现自动、可视化管理迭代

现如今&#xff0c;AI正在成为跨时代的技术&#xff0c;在数字经济发展中登上舞台&#xff0c;发挥关键作用。在Gartner发布的《2022年新兴技术成熟度曲线》*报告中&#xff0c;AIGC&#xff08;即AI Generated Content&#xff0c;人工智能自动生成内容&#xff09;被列为2022…...

汽车 Automotive > CAN Transceivers收发器选择

参考&#xff1a;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收发器&#xff0c;具有待机模式&#xff0c;适用于所有类型的高速CAN网络&#xff0c;在需要低功耗模式的节点…...

AI将如何影响程序员的未来,以及如何不被AI所替代。

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

nginx 常用配置之 pass_proxy

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

Linux中驱动模块加载方法分析

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

yarn 通过 resolutions,指定子孙依赖包版本号,解决froala-editor 版本问题

前端开发项目过程中会使用到各种依赖包。但是这些依赖包虽然好用&#xff0c;但是一味使用最新版本可能会出现各种奇葩问题&#xff0c;因此我们经常会针对一些依赖包指定一个稳定版本。 常用版本 版本号注释“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 函数至简原则&#xff08;重点&#xff09;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 其他教程&#xff1a;ZED2相机SDK安装使用及ROS下使用_可即的博客-CSDN博客 3、官方文档 Get Started with ZED | Stereolabs 4、标定参…...

树莓派4b配置OpenWrt联网

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

不同语言下的定时器,你都掌握了吗?

我们大家都对定时器不陌生&#xff0c;无论是现实中还是项目中&#xff0c;都离不开定时。在现实中&#xff0c;它叫闹钟&#xff0c;在项目上&#xff0c;它叫定时器&#xff0c;即定时触发某件事情。它能帮助我们在某一个既定的时间节点上&#xff0c;来提醒我们做一些事情&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失败或错乱的问题

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

【2.21】MySQL索引、动态规划、学习方法

索引常见面试题 什么是索引 索引的定义就是帮助存储引擎快速获取数据的一种数据结构&#xff0c;形象的说就是索引是数据的目录。存储引擎&#xff0c;说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。索引和数据就是位于存储引擎。…...

华为OD机试题 - 二叉树层次遍历(JavaScript)| 包含代码编写思路

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

力扣解法汇总1140. 石子游戏 II

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

Kerberos认证原理与使用教程

Kerberos认证原理与使用教程 一、Kerberos 概述 二、什么是 Kerberos ​ Kerberos 是一种计算机网络认证协议&#xff0c;用来在非安全网络中&#xff0c;对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。软件设计上采用客户端…...

内存取证常见例题思路方法-volatility (没有最全 只有更全)

目录 1.从内存文件中获取到用户hacker 的密码并且破解密码&#xff0c;将破解后的密码作为 Flag值提交; 2.获取当前系统的主机名&#xff0c;将主机名作为Flag值提交; 3.获取当前系统浏览器搜索过的关键词&#xff0c;作为Flag提交; 4.获取当前内存文件的 ip地址 5.当前系…...

10 种主数据模型设计示例分享,推荐收藏

主数据模型是主数据管理的基础&#xff0c;一个完整的、可扩展的、相对稳定的主数据模型对于主数据管理的成功起着重要的作用。规划、创建主数据模型的过程&#xff0c;是梳理主数据管理体系的过程&#xff0c;目的是建立一个良好的资源目录结构&#xff0c;划分合理的资源粒度…...

React学习笔记

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

【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函数嵌套使用&#xff0c;得到虚拟DOM树&#xff08;重要&#xff09;3.5 patchVnode函数3.6…...

算法学习与填充计划---2023.2.21---夏目

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石.CSDN &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​ &#x1f4e3;系列专栏&#xff1a;ACM周训练题目合集.CSDN &#x1f4ac;总结&#xff1a…...

JavaScript中怎么实现链表?

JavaScript中怎么实现链表&#xff1f; 学习数据结构的的链表和树时&#xff0c;会遇到节点&#xff08;node&#xff09;这个词&#xff0c;节点是处理数据结构的链表和树的基础。节点是一种数据元素&#xff0c;包括两个部分&#xff1a;一个是实际需要用到的数据&#xff1b…...

多孔弹性材料中传播的膨胀波方法(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密…...

时间复杂度与空间复杂度

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

UDP报文详解

目录 &#x1f433;今日良言:走好选择的路&#xff0c;别选择好走的路&#xff0c;你才能拥有真正的自己。 &#x1f43c;一、UDP协议特点 &#x1f43c;二、UDP协议段格式详解 &#x1f433;今日良言:走好选择的路&#xff0c;别选择好走的路&#xff0c;你才能拥有真正的自…...

C#开发的OpenRA的NextPowerOf2

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

CDH 6.3.2启用HDFS高可用

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

多服务器节点访问解决一人一单问题+redis设置锁方案

项目地址及项目具体介绍-码云仓库&#xff1a;https://gitee.com/flowers-bloom-is-the-sea/distributeNodeSolvePessimisticLockByRedis 测试1&#xff1a; 这里使用jmeter同时启动2各线程&#xff1a; 原来的数据库表的数据&#xff1a; goods的数据是&#xff1a; id …...