日志模块和Plus模块升级以及问题修复
文章目录
- 1.common-log4j2-starter
- 1.目录
- 2.LogAspectProperties.java 日志切面配置
- 3.TraceProperties.java 链路追踪配置
- 4.Log4j2AutoConfiguration.java 条件注入链路追踪过滤器
- 2.common-mybatis-plus-starter
- 1.目录
- 2.引入依赖
- 3.SqlBeautyProperties.java 读取sql.beauty相关配置
- 4.MybatisPLusAutoConfiguration.java 启用配置类
- 5.SqlBeautyInterceptor.java SQL优化器升级
- 3.common-mybatis-plus-starter-demo 引入日志模块
- 1.目录
- 2.pom.xml 引入依赖以及排除logging(重要!!!)
- 3.application.yml 开启日志配置
- 4.测试
- 1.traceId
- 2.方法出入参
- 3.SQL打印
1.common-log4j2-starter
1.目录
2.LogAspectProperties.java 日志切面配置
package com.sunxiansheng.log4j2.config.properties;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** Description: 日志切面配置** @Author sun* @Create 2024/10/24 23:16* @Version 1.0*/
@Component
@ConfigurationProperties(prefix = "log.aspect")
public class LogAspectProperties {private boolean enable = false;public boolean isEnable() {return enable;}public void setEnable(boolean enable) {this.enable = enable;}
}
3.TraceProperties.java 链路追踪配置
package com.sunxiansheng.log4j2.config.properties;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** Description: 链路追踪配置** @Author sun* @Create 2024/10/24 23:12* @Version 1.0*/
@Component
@ConfigurationProperties(prefix = "log.trace")
public class TraceProperties {private boolean enable = false;public boolean isEnable() {return enable;}public void setEnable(boolean enable) {this.enable = enable;}
}
4.Log4j2AutoConfiguration.java 条件注入链路追踪过滤器
package com.sunxiansheng.log4j2.config;import com.sunxiansheng.log4j2.aspectj.LogAspect;
import com.sunxiansheng.log4j2.config.properties.TraceProperties;
import com.sunxiansheng.log4j2.trace.TraceIdFilter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** Description: Log4j2自动配置类** @Author sun* @Create 2024/10/24 10:36* @Version 1.0*/
@Configuration
@EnableConfigurationProperties({TraceProperties.class, TraceProperties.class}) // 启用配置类
public class Log4j2AutoConfiguration {/*** 条件注入LogAspect** @return*/@Bean@ConditionalOnMissingBean@ConditionalOnProperty(name = "log.aspect.enable", havingValue = "true", matchIfMissing = true)LogAspect logAspect() {return new LogAspect();}/*** 条件注入链路追踪过滤器** @return*/@Bean@ConditionalOnMissingBean@ConditionalOnProperty(name = "log.trace.enable", havingValue = "true", matchIfMissing = true)TraceIdFilter traceIdFilter() {return new TraceIdFilter();}
}
2.common-mybatis-plus-starter
1.目录
2.引入依赖
<!-- gson -->
<dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId>
</dependency>
3.SqlBeautyProperties.java 读取sql.beauty相关配置
package com.sunxiansheng.mybatis.plus.config.properties;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** Description: 读取sql.beauty相关配置** @Author sun* @Create 2024/10/24 23:17* @Version 1.0*/
@Component
@ConfigurationProperties(prefix = "sql.beauty")
public class SqlBeautyProperties {private boolean enabled = false;public boolean isEnabled() {return enabled;}public void setEnabled(boolean enabled) {this.enabled = enabled;}
}
4.MybatisPLusAutoConfiguration.java 启用配置类
5.SqlBeautyInterceptor.java SQL优化器升级
package com.sunxiansheng.mybatis.plus.inteceptor;import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.mapping.*;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.reflection.*;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.ResultHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.github.vertical_blank.sqlformatter.SqlFormatter;
import com.github.vertical_blank.sqlformatter.languages.Dialect;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;import java.sql.Statement;
import java.util.List;
import java.util.Properties;
import java.util.regex.Matcher;/*** SQL美化拦截器:显示完整的SQL,并输出执行结果*/
@Intercepts({@Signature(type = StatementHandler.class, method = "query", args = {Statement.class, ResultHandler.class}),@Signature(type = StatementHandler.class, method = "update", args = {Statement.class}),@Signature(type = StatementHandler.class, method = "batch", args = {Statement.class})
})
public class SqlBeautyInterceptor implements Interceptor {private static final Logger logger = LoggerFactory.getLogger(SqlBeautyInterceptor.class);// ANSI 颜色代码private static final String ANSI_RESET = "\u001B[0m";private static final String ANSI_BRIGHT_GREEN = "\u001B[92m"; // 亮绿色(结果)private static final String ANSI_BRIGHT_BLUE = "\u001B[94m"; // 亮蓝色(项目名称)// Gson 实例,用于格式化结果private static final Gson GSON = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create();@Overridepublic Object intercept(Invocation invocation) throws Throwable {StatementHandler statementHandler = (StatementHandler) invocation.getTarget();// 通过 MetaObject 获取 delegate 对象MetaObject metaObject = SystemMetaObject.forObject(statementHandler);// 获取 MappedStatementMappedStatement mappedStatement = (MappedStatement) metaObject.getValue("delegate.mappedStatement");// 获取 SQL 类型SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType();// 获取 ConfigurationConfiguration configuration = mappedStatement.getConfiguration();long startTime = System.currentTimeMillis();Object result = null;try {// 执行 SQL,获取结果result = invocation.proceed();return result;} finally {long endTime = System.currentTimeMillis();long sqlCost = endTime - startTime;BoundSql boundSql = statementHandler.getBoundSql();String sql = boundSql.getSql();Object parameterObject = boundSql.getParameterObject();// 创建 MetaObject 实例MetaObject metaObjectParam = configuration.newMetaObject(parameterObject);// 格式化 SQLString formattedSql = formatSql(sql, boundSql, metaObjectParam);// 格式化执行结果String formattedResult = formatResult(result, sqlCommandType);// 日志输出,使用指定的颜色显示各部分logger.info("\n========================\n{}SQL 类型:{} {}{}{}\n{}SQL:{}\n{}{}{}\n{}执行耗时:{} {}{}ms{} \n{}结果:{}\n{}{}\n{}========================{}",ANSI_BRIGHT_BLUE, ANSI_RESET,ANSI_BRIGHT_GREEN, sqlCommandType, ANSI_RESET,ANSI_BRIGHT_BLUE, ANSI_RESET,ANSI_BRIGHT_GREEN, formattedSql, ANSI_RESET,ANSI_BRIGHT_BLUE, ANSI_RESET,ANSI_BRIGHT_GREEN, sqlCost, ANSI_RESET,ANSI_BRIGHT_BLUE, ANSI_RESET,ANSI_BRIGHT_GREEN, formattedResult, ANSI_RESET,ANSI_BRIGHT_BLUE, ANSI_RESET);}}@Overridepublic Object plugin(Object target) {// 使用 Plugin.wrap 生成代理对象return Plugin.wrap(target, this);}@Overridepublic void setProperties(Properties properties) {// 可以通过配置文件设置属性}/*** 格式化 SQL,将参数替换到 SQL 中,并使用 SQLFormatter 进行格式化** @param sql 原始 SQL* @param boundSql 绑定的 SQL* @param metaObject 参数对象的 MetaObject* @return 格式化后的 SQL*/private String formatSql(String sql, BoundSql boundSql, MetaObject metaObject) {if (sql == null || sql.trim().isEmpty()) {return "";}try {// 获取参数映射List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();if (parameterMappings != null && !parameterMappings.isEmpty()) {// 遍历参数映射,替换占位符for (ParameterMapping parameterMapping : parameterMappings) {String propertyName = parameterMapping.getProperty();Object value;if (metaObject.hasGetter(propertyName)) {value = metaObject.getValue(propertyName);} else if (boundSql.hasAdditionalParameter(propertyName)) {value = boundSql.getAdditionalParameter(propertyName);} else {// 对于无法获取值的参数,使用 "?" 替代value = "?";}sql = sql.replaceFirst("\\?", Matcher.quoteReplacement(getParameterValue(value)));}}// 使用 SQLFormatter 格式化 SQL,指定数据库方言(根据实际情况选择)String formattedSql = SqlFormatter.of(Dialect.MySql).format(sql);return formattedSql;} catch (Exception e) {logger.error("Error formatting SQL: ", e);return sql;}}/*** 获取参数值的字符串表示,处理字符串、日期等类型** @param obj 参数值* @return 字符串表示*/private String getParameterValue(Object obj) {if (obj == null) {return "null";}if (obj instanceof String) {return "'" + obj + "'";}if (obj instanceof Number) {return obj.toString();}if (obj instanceof java.util.Date || obj instanceof java.sql.Date || obj instanceof java.sql.Timestamp) {return "'" + obj.toString() + "'";}return "'" + obj.toString() + "'";}/*** 格式化 SQL 执行结果** @param result 执行结果* @param sqlCommandType SQL 类型* @return 格式化后的结果字符串*/private String formatResult(Object result, SqlCommandType sqlCommandType) {if (result == null) {return "null";}try {String formattedResult;if (sqlCommandType == SqlCommandType.SELECT) {// 查询语句,结果通常是 ListformattedResult = GSON.toJson(result);} else if (sqlCommandType == SqlCommandType.UPDATE || sqlCommandType == SqlCommandType.DELETE || sqlCommandType == SqlCommandType.INSERT) {// 更新语句,结果是受影响的行数formattedResult = result.toString() + " 行受影响";} else {// 其他类型formattedResult = result.toString();}// 可根据需要限制结果输出长度,避免日志过大int maxLength = 2000;if (formattedResult.length() > maxLength) {formattedResult = formattedResult.substring(0, maxLength) + "... [结果过长,已截断]";}return formattedResult;} catch (Exception e) {logger.error("Error formatting result: ", e);return result.toString();}}
}
3.common-mybatis-plus-starter-demo 引入日志模块
1.目录
2.pom.xml 引入依赖以及排除logging(重要!!!)
<!-- spring-boot-starter-test -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><exclusions><exclusion><artifactId>spring-boot-starter-logging</artifactId><groupId>org.springframework.boot</groupId></exclusion></exclusions>
</dependency>
<dependency><groupId>com.sunxiansheng</groupId><artifactId>common-log4j2-starter</artifactId><version>1.0-SNAPSHOT</version>
</dependency>
3.application.yml 开启日志配置
log:aspect:enable: true # 开启自定义的日志切面trace:enable: true # 开启自定义的日志追踪
4.测试
1.traceId
2.方法出入参
3.SQL打印
相关文章:
日志模块和Plus模块升级以及问题修复
文章目录 1.common-log4j2-starter1.目录2.LogAspectProperties.java 日志切面配置3.TraceProperties.java 链路追踪配置4.Log4j2AutoConfiguration.java 条件注入链路追踪过滤器 2.common-mybatis-plus-starter1.目录2.引入依赖3.SqlBeautyProperties.java 读取sql.beauty相关…...
【Bug】报错信息:Required request body is missing(包含五种详细解决方案)
大家好,我是摇光~ 遇到“Required request body is missing”错误通常意味着服务器期望在HTTP请求中包含一个请求体(body),但是实际上并没有收到。 例如: 当你在使用网页或应用程序的后台(比如一个网站或手…...
Ceph分布式存储集群,不仅仅是一个简单的对象存储解决方案
Ceph 作为 OpenStack 的存储后端 块存储(Cinder 后端) Ceph 的 RBD(RADOS Block Device)模块作为 OpenStack Cinder 服务的后端,为虚拟机提供块级别的存储资源。RBD 支持快照、克隆和恢复等功能,能够满足虚…...
6.business english--updates
能够运用一系列表达方式来提供和接收最新情况,并讨论后续行动事项。 be able to use a range of expression to give and receive updates and to discuss follow-up action items in a typical week 在平常的一周里 The company promises that the quality will …...
Lianwei 安全周报|2024.1.7
以下是本周「Lianwei周报」,我们总结推荐了本周的政策/标准/指南最新动态、热点资讯和安全事件,保证大家不错过本周的每一个重点! 政策/标准/指南最新动态 01 国家发改委等三部门印发《国家数据基础设施建设指引》 国家数据基础设施是从数据…...
加速科技荣获“浙江省企业研究院”认定
近日,浙江省经济和信息化厅公布“2024年认定(备案)省级企业研发机构名单”。经过多轮严格评审和公示,加速科技荣获“省企业研究院”认定。这是加速科技继获国家级专精特新“小巨人”企业认定荣誉后的又一里程碑。 “浙江省企业研究…...
嵌入式C语言:什么是指针?
目录 一、指针的基本概念 1.1. 定义指针 1.2. 赋值给指针 1.3. 解引用指针 1.4. 指针运算 1.5. 空指针 1.6. 函数参数 1.7. 数组和指针 1.8. 示例代码 二、指针在内存中的表示 2.1. 内存地址存储 2.2. 内存模型 2.3. 指针与硬件交互 2.4. 示例代码 三 、指针的重…...
Python 管理 GitHub Secrets 和 Workflows
在现代软件开发中,自动化配置管理变得越来越重要。本文将介绍如何使用 Python 脚本来管理 GitHub 仓库的 Secrets 和 Workflows,这对于需要频繁更新配置或管理多个仓库的团队来说尤为有用。我们将分三个部分进行讨论:设置 GitHub 权限、创建 GitHub Secret 和创建 GitHub Wo…...
wireshark排除私接小路由
1.wireshark打开,发现了可疑地址,合法的地址段DHCP是192.168.100.0段的,打开后查看发现可疑地址段,分别是,192.168.0.1 192.168.1.174 192.168.1.1。查找到它对应的MAC地址。 ip.src192.168.1.1 2.通过show fdb p…...
Vue3初学之Element-plus
用于快速的上手开发,以做项目为导向,所以借用element-plus插件 发现淘宝的镜像有时候也是很慢的,还可以换个 npm config set registry https://registry.npmmirror.com 安装element-plus npm install element-plus --save 查看安装是否成…...
day06_Spark SQL
文章目录 day06_Spark SQL课程笔记一、今日课程内容二、DataFrame详解(掌握)5.清洗相关的API6.Spark SQL的Shuffle分区设置7.数据写出操作写出到文件写出到数据库 三、Spark SQL的综合案例(掌握)1、常见DSL代码整理2、电影分析案例…...
苍穹外卖07——来单提醒和客户催单(涉及SpringTask、WebSocket协议、苍穹外卖跳过微信支付同时保证可以收到订单功能)
Spring Task介绍 应用场景: 信用卡每月还款提醒银行贷款每月还款提醒火车票销售系统处理未付款订单入职纪念日为用户发送通知 cron表达式 cron表达式其实就是一个字符串,通过cron表达式可以定义任务触发的时间。 构成规则:分为6或7个域&…...
IDEA的常用设置
目录 一、显示顶部工具栏 二、设置编辑区字体按住鼠标滚轮变大变小(看需要设置) 三、设置自动导包和优化导入的包(有的时候还是需要手动导包) 四、设置导入同一个包下的类,超过指定个数的时候,合并为*&a…...
【GoLang】两个字符串如何比较大小?以及字典顺序的比较规则
在 Go 语言中,字符串的比较是基于字典顺序进行的。 字典顺序的比较规则: 比较两个字符串从左到右逐个字符的Unicode码点值, 若比较结果不相等则将此结果作为字符串大小的结果, 若比较结果相等则比较下一位, 若其中一个…...
3d打印材料是塑料么?pla petg
3D 打印材料不仅限于塑料,但塑料确实是最常见的材料类型之一。以下是一些常用的3D打印塑料材料的介绍: 1. PLA(聚乳酸) • 特点:可生物降解,环保,容易打印,表面光滑。 • 适用…...
HTML5 语义元素:网页构建的新时代
HTML5 语义元素:网页构建的新时代 HTML5,作为网页开发的新标准,引入了一系列语义元素,这些元素不仅为网页内容提供了明确的含义,还极大地提高了网页的可访问性和搜索引擎优化(SEO)效果。本文将…...
下载导出Tomcat上的excle文档,浏览器上显示下载
目录 1.前端2.Tomcat服务器内配置3.在Tomcat映射的文件内放置文件4.重启Tomcat,下载测试 1.前端 function downloadFile() {let pictureSourceServer "http://192.168.1.1:8080/downFile/";let fileName "测试文档.xlsx";let fileURL pictu…...
Edge浏览器内置的截长图功能
Edge浏览器内置截图功能 近年来,Edge浏览器不断更新和完善,也提供了长截图功能。在Edge中,只需点击右上角的“...”,然后选择“网页捕获”->“捕获整页”,即可实现长截图。这一功能的简单易用,使其成为…...
【测试】持续集成CI/CD
近期更新完毕,建议关注收藏点赞~ 目录 概括gitJenkinspostman集成jenkins代码集成jenkins 概括 CI/CD stands for Continuous Integration and Continuous Deployment 定义 团队成果持续集成到公共平台。一天可以集成1次or多次 本地代码管理 git 远程代…...
大数据数据治理精讲
前言 首先明确,数据治理是一个很大的概念。 在许多与数据相关的文章中,我们经常能看到“数据治理”这一术语。从字面意思来看,它主要强调对数据进行有效管理。作为数据基础支撑工作的一部分,数据治理的重要性不言而喻。在日常工作…...
Spring Boot项目中增加MQTT对接
在Spring Boot项目中增加MQTT对接,通常涉及以下几个步骤: 一、搭建MQTT服务器 首先,你需要搭建一个MQTT服务器(Broker)。这可以通过多种方式实现,例如使用Docker来部署EMQX或Mosquitto等MQTT Broker。 以…...
Python自学 - 类进阶(迭代器)
<< 返回目录 1 Python自学 - 类进阶(迭代器) 迭代器是一个实现了 __iter__ 和 __next__ 方法的对象。实现这两个方法是Python迭代行为一种约定。 为什么要用迭代器?迭代器的好处是不占内存,它并不会像列表一样,把每个成员都占满。…...
FreePBX 17 on ubuntu24 with Asterisk 20
版本配置: FreePBX 17(最新) Asterisk 20(最新Asterisk 22,但是FreePBX 17最新只支持Asterisk 21,但是21非LTS版本,所以选择Asterisk 20) PHP 8.2 Maria DB (v10.11) Node J…...
SpringCloud系列教程:微服务的未来(十一)服务注册、服务发现、OpenFeign快速入门
本篇博客将通过实例演示如何在 Spring Cloud 中使用 Nacos 实现服务注册与发现,并使用 OpenFeign 进行服务间调用。你将学到如何搭建一个完整的微服务通信框架,帮助你快速开发可扩展、高效的分布式系统。 目录 前言 服务注册和发现 服务注册 编辑 …...
[应用类App] 轮廓线 aia源码 UI界面精美,画布实现手柄摇杆
屏幕数量:10个,仅主界面近3000代码块,请自行研究参考。 实现了手柄摇杆功能,界面做的比较好。 下载地址:轮廓线 aia源码 UI界面精美,画布实现手柄摇杆 - .aia 案例源码 - 清泛IT社区,为创新赋能…...
慧集通(DataLinkX)iPaaS集成平台-业务建模之业务对象(一)
通过左侧导航菜单〖业务建模〗→〖业务对象〗,进入该界面;在该界面可以查看到系统中已存在的业务对象; 1.新建业务对象 在DatalinkX中进入【业务建模】的【业务对象】页面,点击【新建】按钮进入新建页面; 新建页面左侧…...
uniapp 之 uni-forms校验提示【提交的字段[‘xxx‘]在数据库中并不存在】解决方案
目录 场景问题代码结果问题剖析解决方案 场景 uni-forms官方组件地址 使用uniapp官方提供的组件,某个表单需求,单位性质字段如果是高校,那么工作单位则是高校的下拉选择格式,单位性质如果是其他的类型,工作单位则是手动…...
JVM 触发类加载的条件有哪些?
目录 一、类加载生命周期 二、主动引用 2.1、创建类的实例 2.2、访问类的静态字段或静态方法 2.3、反射 2.4、初始化类的子类时,先初始化父类 2.5、虚拟机启动时,初始化 main 方法所在的类 2.6、动态语言支持 三、被动引用 3.1、通过子类引用父…...
01 springboot集成mybatis后密码正确但数据库连接失败
01 springboot集成mybatis后密码正确但数据库连接失败 问题描述: 1.datasource配置: //application.yaml spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mp?useUnicodetrue&characterEncodingUTF-8&autoReconnecttrue&serverTime…...
学习threejs,导入assimp assimp2json格式的模型
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.AssimpJSONLoader as…...
NLTK分词以及处理方法
在自然语言处理(NLP)的领域中,文本的处理是一个基础且核心的环节,特别是在大规模数据分析和文本挖掘中。无论是聊天机器人、情感分析,还是机器翻译,分词都是必不可少的步骤之一。分词的目的是将长篇的文本拆解为较小的单位(如单词或句子),这些单位是后续分析和处理的基…...
容器技术全面攻略:Docker的硬核玩法
文章背景 想象一下,一个项目终于要上线了,结果因为环境配置不一致,测试服务器一切正常,生产环境却宕机了。这是开发者噩梦的开始,也是Docker救世主角色的登场!Docker的出现颠覆了传统环境配置的方式&#…...
什么是顶级思维?
在现代社会,我们常常听到“顶级思维”这个概念,但究竟什么才是顶级思维?它又是如何影响一个人的成功和幸福呢?今天,我们就来探讨一下顶级思维的几个关键要素,并分享一些实用的生活哲学。 1. 身体不适&…...
Chromium 132 编译指南 Windows 篇 - 配置核心环境变量 (三)
1. 引言 在之前的 Chromium 编译指南系列文章中,我们已经完成了编译前的准备工作以及 depot_tools 工具的安装与配置。本篇我们将聚焦于 Chromium 编译过程中至关重要的环境变量设置,这些配置是您顺利进行 Chromium 构建的基石。 2. 启用本地编译&…...
Linux查看服务器日志
一、tail 这个是我最常用的一种查看方式 用法如下: tail -n 10 test.log 查询日志尾部最后10行的日志; tail -n 10 test.log 查询10行之后的所有日志; tail -fn 10 test.log 循环实时查看最后1000行记录(最常用的)一般还会配合着grep用ÿ…...
Docker 专栏 —— Dockerfile 指令详解
文章目录 ADD 复制文件COPY 复制文件ARG 设置构建参数CMD 容器启动命令ENTRYPOINT ⼊⼝点ENV 设置环境变量EXPOSE 声明暴露的端⼝FROM 指定基础镜像LABEL 为镜像添加元数据MAINTAINER 指定维护者的信息RUN 执⾏命令USER 设置⽤户VOLUME 指定挂载点WORKDIR 指定⼯作⽬录 ADD 复制…...
IntelliJ IDEA 优化设置
针对 Java 开发,IntelliJ IDEA 有许多优化设置,可以帮助提高代码编写、调试、构建和运行的效率。以下是一些针对 Java 开发的优化建议: 1. 增加 JVM 内存和性能优化 增加堆内存: 通过调整 idea.vmoptions 文件,增加 IntelliJ ID…...
git打补丁
1、应用场景 跨仓库升级 开发项目B使用的是开源项目A。开源项目A发现漏洞,作者进行了修复,我们可以通过使用git补丁的方式,将作者修改的内容复制到我 们的项目B中。 2、TortoiseGit方式 源仓库 格式化补丁 根据提交数量,生成…...
开源CMS建站系统的安全优势有哪些?
近年来,用户们用开源CMS系统搭建网站的比例也越来越高,它为用户提供了便捷的网站建设解决方案。其中,亿坊CMS建站系统更因安全方面备受用户欢迎,下面带大家一起全面地了解一下。 一、什么是开源CMS? 开源CMS指的是那…...
【linux系统之redis6】redis的基础命令使用及springboot连接redis
redis的基础命令很多,大部分我们都可以在官网上找到,真的用的时候可以去官网找,不用全部记住这些命令 redis通用的基础命令的使用 代码测试 string类型常见的命令 key值的结构,可以区分不同的需求不同的业务名字 hash类型 创建…...
HDFS异构存储和存储策略
一、HDFS异构存储类型 1.1 冷、热、温、冻数据 通常,公司或者组织总是有相当多的历史数据占用昂贵的存储空间。典型的数据使用模式是新传入的数据被应用程序大量使用,从而该数据被标记为"热"数据。随着时间的推移,存储的数据每周…...
VSCode 使用鼠标滚轮控制字体
一、 文件 | 首选项 | 设置 二、单击在 settings.json中编辑 "editor.mouseWheelZoom": true 注注注意:保存哦!ctrlS 三、测试 按住ctrl鼠标滚轮,控制字体大小...
全面教程:Nacos 2.4.2 启用鉴权与 MySQL 数据存储配置
全面教程:Nacos 2.4.2 启用鉴权与 MySQL 数据存储配置 1. 配置 Nacos 开启鉴权功能 1.1 修改 application.properties 配置文件 在 Nacos 2.4.2 中,开启鉴权功能需要修改 conf/application.properties 文件。按照以下方式配置: # 开启鉴权…...
pycharm-pyspark 环境安装
1、环境准备:java、scala、pyspark、python-anaconda、pycharm vi ~/.bash_profile export SCALA_HOME/Users/xunyongsun/Documents/scala-2.13.0 export PATH P A T H : PATH: PATH:SCALA_HOME/bin export SPARK_HOME/Users/xunyongsun/Documents/spark-3.5.4-bin…...
论文解析 | 基于语言模型的自主代理调查
论文 《A Survey on Large Language Model-based Autonomous Agents》 对基于大型语言模型(LLM)的自主智能体(Autonomous Agents)进行了全面调查。随着大型语言模型(如 GPT 系列、BERT、T5 等)的快速发展&a…...
Jupyter Notebook 安装PyTorch
1、判断当前环境 通过如下命令可以看出是Anaconda 环境 2、Anaconda 环境安装 PyTorch 2.1 要执行的命令 如果你使用的是 Anaconda 环境,可以使用以下命令来安装 PyTorch: conda install pytorch -c pytorch 2.2 执行遇到的问题:没有权…...
计算机网络之---ICMP协议与Ping命令
ICMP 协议 ICMP (Internet Control Message Protocol) 是一种网络层协议,主要用于在 IP 网络中传递控制消息。ICMP 主要用于网络设备之间的故障报告和诊断,帮助设备检测网络连接问题。它是 IP 协议的核心部分之一,用于发送错误消息和操作信息…...
Flutter项目开发模版,开箱即用(Plus版本)
前言 当前案例 Flutter SDK版本:3.22.2 本文,是由这两篇文章 结合产出,所以非常建议大家,先看完这两篇: Flutter项目开发模版: 主要内容:MVVM设计模式及内存泄漏处理,涉及Model、…...
工作效率提升:使用Anaconda Prompt 创建虚拟环境总结
目录 完整顺序命令流程(直接照着改就行)详细步骤解析(想要详细解析的看过来)1. 创建一个用于存储 Conda 环境的目录(可选)2. 创建新的 Conda 虚拟环境并指定路径3. 激活新创建的环境4. 安装 Jupyter Notebo…...
MySQL学习笔记2【函数/约束/多表查询】
MySQL学习笔记 函数 字符串函数 函数功能CONCAT(s1, s2, …, sn)字符串拼接,将s1, s2, …, sn拼接成一个字符串LOWER(str)将字符串全部转为小写UPPER(str)将字符串全部转为大写LPAD(str, n, pad)左填充,用字符串pad对str的左边进行填充,达到…...