自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

牧竹子

个人微信订阅号:牧竹子

  • 博客(293)
  • 资源 (6)
  • 收藏
  • 关注

原创 springboot在feign和线程池中使用TraceId日志链路追踪(最终版)-2

异步请求丢失上文的问题,这些问题追根究底都是ThreadLocal惹得祸。由于ThreadLocal只能保存当前线程的信息,不能实现父子线程的继承。说到这,很多人想到了InheritableThreadLocal,确实InheritableThreadLocal能够实现父子线程间传递本地变量,但是你的程序如果采用线程池,则存在着线程复用的情况,这时就不一定能够实现父子线程间传递了,因为在线程在线程池中的存在不是每次使用都会进行创建,

2025-03-26 17:05:21 864

转载 SpringBoot使用TraceId日志链路追踪-1

用途:每一次链路,线程维度,添加最终的链路ID traceId。MDC(Mapped Diagnostic Context)诊断上下文映射,是@Slf4j提供的一个支持动态打印日志信息的工具。/*** 日志拦截器*/@Override//可以考虑让客户端传入链路ID,但需保证一定的复杂度唯一性;如果没使用默认UUID自动生成,这里也支持feign方式调用其他服务接口前提是要在请求头中把traceId带过去if (!@Override。

2025-03-13 17:31:02 55

原创 甲流和普通感冒如何区别

在重症肺炎治疗上,宜采用抗生素降阶梯疗法策略,抗菌谱应尽可能覆盖所有致病菌,可经验性优先选用亚胺培南、哌拉西林—三唑巴坦和头孢吡肟,加酶抑制剂的第三代头孢菌素以及新喹诺酮类,获得细菌学结果后,再根据药敏结果和临床情况,改用针对性强的抗生素及降阶梯治疗。重症肺炎的主要致病菌是革兰阴性菌,占74.8%,其中铜绿假单胞菌位于首位,表2中可看到该菌除头孢吡肟(25.0%),哌拉西林-三唑巴坦(27.8%),头孢他啶(27.8%),亚胺培南(30.5%),环丙沙星(33.3%)以外,对其他各药均耐药严重;

2025-02-08 10:41:26 832

原创 安装python3.14和cmd下运行python弹出windows应用商店

主要是windw11升级系统后默认把自带的应用商店放入了环境变量中,方便用户优先使用自带的商店下载应用。但是同时也出现应用命令即便是安装了也依然会去打开商店搜索,就很鸡肋对用户不友好。方法:直接删除windos环境变量中的应用商店路径。其他blog都没说到根本原因,主要参考如下blog。需要输入2个环境变量,注意不是1个。

2025-02-05 08:58:06 470

原创 HTTP中form-data、x-www-form-urlencoded、raw、binary的区别

在日常接口对接工作中经常遇到如上HTTP请求类型,虽然最常用的是POST但是即便这种方式也会在第三方应用中看到不同的请求格式;现总结下以方便区分。

2025-01-15 11:22:08 1268

原创 替代visio画图工具Processon和drawio

离线客户端:https://github.com/jgraph/drawio-desktop/releases/tag/v24.7.17。国产类似visio工程类的工具,可以创建工程和流程图明细,类似excel表格页签方式,多个图在同一个工程中;个人使用,开源的可以使用,drawio 特别是离线不用联网,比较方便;支持多种方式:在线版本,离线客户端(支持mac,win),自己部署web;VISIO虽然是画图工具的天花板,但是大多需要付费版本也挺麻烦的,基本大家都改用其他方式替代该工具。

2024-11-28 16:50:05 773

原创 对原jar包解压后修改原class文件后重新打包为jar

或者我们希望在现有的jar中添加自己的方法,或者修改现有jar中的依赖启动项目,比如历史jar依赖的当前运行环境中的resource中的配置文件,或者特定的文件路径比如d//config,这种如果在centos环境,或者在docer环境根本就无法加载到这些文件路径。这种情况使用上面的排除是没办法的,如下图,org.apache.commons.lang3的源码它给直接合到它的项目中了,而不是使用的依赖pom加载,这种方式,你只能通过本文的方式手工清理这种强依赖。切换到META-INF\maven下找到。

2024-11-20 17:40:12 1294

原创 FLINK单机版安装部署入门-1

m:指定主机名后面的端口为 JobManager的 REST 通信端口,而不是 RPC的端口,RPC通信端口是 6123(在提交任务时,是通过 REST 端口号(HTTP端口号),将任务上传到 JobManager.)这里我们依然以example中的WordCount.jar为例提交,点击该明细会出现执行的main文件路径合参数配置,默认即可,点击submit提交。,链接http://host:8778/#/overview,查看dashboard (这里的host为部署flink的机器host)

2024-11-02 22:14:34 1668

原创 一般无人机和FPV无人机的区别

根据当前的发展趋势,以及近十年来历次现代化的现状可以预测,未来将是智能化、信息化技术的角逐,减少任务途中人工操作流程,任务途中断开远程操作的媒介完全靠机器智能完成,自然也也就没有所谓的电子信号干扰和遥控拦截了。FPV无人机可以深入到人类难以到达的地方,如洞穴、森林深处等,进行探索和拍摄,为探险爱好者提供新的视角和体验。FPV无人机设计上强调高速和灵活性,能够进行高速度的飞行和急转弯,适合竞速比赛和高难度飞行。一般无人机的电池容量较大,续航时间较长,适合长时间飞行任务,如测绘、巡检等。

2024-11-02 15:23:44 1431

原创 SpringBoot 项目 Jar 包加密,防止反编译

在单模块中此方案还算简单,但是现在项目一般都是多模块,一个模块依赖多个公共模块。那么使用此方案就比较麻烦,配置复杂,文档难懂,各模块之间的调用在是否混淆时极其容易出错。要求对正式环境的启动包进行安全性处理,防止客户直接通过反编译工具将代码反编译出来。只需要在启动类的pom.xml文件中加如下插件即可,需要注意的是,改插件时要放到spring-boot-maven-plugin插件后面,否则不起作用。启动包加密之后,方法体被清空,保留方法参数、注解等信息.主要兼容swagger文档注解扫描。

2024-09-13 16:47:01 1209

原创 DDD核心概念

充血模型虽然是DDD中推崇的设计模式,通过领域实体,一些关键行为和逻辑其实也能一起拿到了,但是在我的经验中,我更喜欢使用贫血+充血的混合模型(或者叫充血模型的简化版),因为这里涉及到一个标准的建立问题,如果只用充血模型的话,哪些行为和逻辑该下方到接口服务层,哪些又该收拢到实体中,这里面每个人的理念不一样。领域建模的优秀与否,可以说直接决定着本次设计的成败,因为一旦发生建模边界不清晰,实体划分错乱,核心属性没有遵守开闭原则等问题,虽然当下可以正常交付业务,但是对于整个项目的后续发展可以说是灾难性的。

2024-09-05 18:56:17 1176

转载 SublimeText4版本为_4169_x64的个人使用配置

将原本的sublime_text重命名为sublime_text_bak,这步是做备份,避免操作失误导致发生意外。然后将sublime_text_bak拖到打开的https://hexed.it/的窗口。官网地址:https://www.sublimetext.com/版本号为sublime_text_build_4169_x64。然后另存为sublime_text.exe完成。在搜索框中输入 807805000f94c1。在https://hexed.it/

2024-05-27 11:52:20 760

原创 服务网格Service Mesh和Istio

对于大规模和复杂的应用场景,Istio可能是一个更好的选择,因为它提供了丰富的功能和强大的扩展性。Istio的功能涵盖了流量管理、策略制定、故障注入等方面,适用于复杂的微服务架构。并且,Istio有着庞大的社区支持,可以获取到大量的文档、教程和问题解答,有利于开发人员学习和使用。此外,服务网格还提供了可观测性和监控的能力,使得开发团队可以更好地理解和调试整个应用程序的运行状况。在选择合适的服务网格解决方案时,开发团队应该综合考虑应用的规模、复杂性、性能需求和团队的技术水平,并根据实际情况做出明智的选择。

2024-02-20 16:33:08 1074

原创 kettle spoon创建带参数定时任务并关闭它

ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。新版本的可以支持mysql8了,但是我这里是服务器上已经有7.0的版本了默认只支持mysql8以下的版本驱动,主要是驱动名称无法手动修改,因此需要mysql8只能通过其他方式;点击箭头执行,它会不停的5分钟一次执行,查看执行结果,绿色START开始-黑色START结束。这里以mysql为例,创建一个表log,复制该表为log_1。

2024-02-06 14:30:08 2963

原创 CentOS 8最小安装和网络配置

CentOS 8的IOS如果下载DVD版本至少有10G这里我们直接选择最小安装,因此选择最小系统boot版本。

2024-02-01 15:29:55 2414

原创 dataGrip连接数据库mysql和intersystems的iris

intersystems公司的产品iris是cache的升级版本,目前绝大多数数据库工具都没法连接这个数据库datagrip下载地址。

2024-01-24 16:47:49 810

原创 camunda-modeler画图入门

使用 Camunda Modeler 部署流程,点击窗口下方工具栏中的🚀部署按钮可以将当前流程部署到流程引擎,点击部署按钮,输入Deployment Name 为 “Payment” ,输入下方REST Endpoint 为http://localhost:8080/engine-rest(需要先启动本地的camunda-bpm-run服务,不然会红框提示未启动服务) ,然后点击右下角Deploy部署。选择左侧的圆圈,在右侧点击即可,双击可以编辑名称,也可也在右侧的属性面板编辑名称。勾选之后才可以删除。

2023-12-26 11:21:09 2729

原创 Nginx 配置反向代理 WebSocket

Nginx 反向代理 WebSocket 服务时需要设置 Upgrade 和 Connection 的 header。

2023-12-25 10:46:04 787 1

原创 mysql插入更新insert into

1.如果表中不存在主键记录,replace和insertupdate都与insert是一样的特点。2.如 果表中存在主键记录,replace相当于执行delete 和 insert两条操作,而insertupdate的相当于执行if exist do update else do insert操作。因此,如果replace填充的字段不全,则会导致未被更新的字段都会修改为默认值,并且如果有自增id的话,自增id会变化为最新的 值(这样如果是以自增id为标志的话可能导致记录丢失);

2023-07-06 09:46:05 1148

原创 XXL-JOB任务分片

如果我们需要在本任务执行结束并且执行成功的时候触发另外一个任务,那么就可以把另外的任务作为本任务的子任务运行,就只需要在本任务里填入另外一个任务的jobId即可(可以在任务列表查看JobId)那么,可以把这几个任务当成一个大任务来串行处理,即在一个任务的末尾触发另一个任务。集群模式:启动多个任务实例,这里可以把每个实例的端口号都改为不同,可以看到同一个任务类有多个机器。对于多10条数据,我们可以创建多个任务每个任务完成不同的ID数据,只要ID不重合,那么就不会重复执行对应的事务。

2023-06-09 14:40:33 6528

原创 windows11安装docker desktop和K8S环境创建镜像和运行dashboard

windows11安装docker desktop实现docker和K8S环境创建镜像和运行;我们知道docker的安装一般我们是安装在linux系统上的,但是如果你的宿主机是windows,那么你还想装docker,那么就需要现在你的windows上装上虚拟机,虚拟机上装linux操作系统,然后在Linux操作系统上再去安装docker,这样比较麻烦。docker desktop的出现就可以解决上面那个问题,你只需要在windows上开启虚拟化功能,然后安装一下docker desktop就可以了。

2023-06-05 17:55:30 3758 3

转载 xxl-job分布式框架源码路由/负载均衡策略算法

xxl-job就是因为内涵丰富的调度策略,使得框架的多样性,灵活性更高。现在就开始讲解xxl-job的核心路由策略算法,总共有10种路由策略,对于以后想从事分布式微服务开发,任务调度的学习是很有必要的。个人认为这个路由算法可以作为标准样例应用在其他分布式路由策略中,后面有时间的话我会整理为工具类牧竹子注:2023/6/4获取注册地址集合的最后一个/**} }

2023-06-04 21:27:11 493

原创 xxjob代码执行过程

调度中心:负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;支持可视化、简单且动态的管理调度信息,包括任务新建,更新,删除,GLUE开发和任务报警等,所有上述操作都会实时生效,同时支持监控调度结果以及执行日志,支持执行器Failover,支持创建执行器等功能。执行模块(执行器):负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行等操作,开发和维护更加简单和高效;

2023-06-04 06:10:15 1964

原创 Seata分布式事务AT、TCC、SAGA、XA模式

可以看出,除了TCC基本都是两阶段模式,成功提交,失败回滚。而根据实现难度,TCC和SAGA都需要手动实现业务回滚代码,复杂度要高一些。其他都可以有数据库或者第三方事务管理器实现回滚业务流程,而你只需要专注业务流程本身。AT,SAGA模式需要所有参与方都有数据库权限,这点如果项目参与方都是一起的不涉及第三方或许可以实现。但如果你调用的是第三方服务,显然不可能支持,第三方更不可能给你提供数据库访问权限,比如支付服务,任何第三方支付都不可能提供数据库权限给你。

2023-05-29 14:38:32 930

原创 nginx配置属性

若未结束,继续普通命中,普通命中和前缀普通命中相似,顺序无所谓,按照location表达式的长短来确定命中结果。如果有多个location匹配的话,则使用表达式最长的那个。http 包含一到多个server, server包含一到多个location。常规字符串匹配,如果有多个location匹配的话,则使用表达式最长的那个。正则匹配,按正则表达式顺序为准,由上至下一旦匹配成功,返回结果,结束解析。前缀匹配,有匹配项,选择最长,返回结果,结束解析。精准匹配,有匹配项,返回结果,结束解析。

2023-05-04 01:07:07 734

原创 IDEA 避免每次打开/新建工程都要重新配置 Maven 解决方案

IDEA 每次新建工程都要重新配置 Maven,是一件相当浪费时间的事情。IDEA 避免每次打开/新建工程都要重新配置 Maven 解决方案。

2023-04-19 17:01:17 1340

原创 vscode设置idea快捷键

VScode ctrl+shift+p打开命令窗,输入 Import IntelliJ Keybindngs (XML)把Untitled-1.json的内容复制到keybindings.json中覆盖并保存即可。首先要导出IDEA中的快捷键设置。在IDEA中选择导出设置,勾选自定义键盘映射并导出。选下拉第一个 直到出现,根据自己的PC调整,这里windos to windos。点击vscode左下角的 设置–>扩展。选择导入刚才解压得到的XML。

2023-04-18 17:22:47 4577 1

原创 DevOps和主流devOps组件

DevOps是一种软件开发方法,涉及软件在整个开发生命周期中的持续开发,持续测试,持续集成,持续部署和持续监控,如此往复。在 DevOps 模式下,开发团队和运营团队都不再是“孤立”的团队。有时,这两个团队会合为一个团队,他们的工程师会在应用程序的整个生命周期(从开发测试到部署再到运营)内相互协作,开发出一系列不限于单一职能的技能。在一些 DevOps 模式下,质保和安全团队也会与开发和运营团队更紧密地结合在一起,贯穿应用程序的整个生命周期。日志管理:Looki,还有种常用的是ELK。

2023-04-04 09:34:20 638

原创 Gin+Gorm+MySql 搭建web脚手架

Gin是Go语言的一套WEB框架,在学习一种陌生语言的陌生框架,最好的方式,就是用我们熟悉的思维去学。作为一名后端Java开发,在最初入门时,最熟悉的莫过于MVC分层结构,可以简单归纳成controller层,model层,dao层,而在SpringBoot框架里,大概也经常看到以下的分层结构。

2023-03-29 13:49:12 1090 3

原创 go环境搭建gin

windows 安装完成会自动设置path环境变量,需要手动添加代理变量GOPROXY=https://goproxy.cn。entos 在~/.profile 中设置环境变量。-u:已存在相关的代码包,强行更新代码包及其依赖包。安装vscode编辑器,安装插件go。-v:打印出被构建的代码包的名字。一个简单的gin服务web。

2023-03-28 11:44:13 679

原创 ArrayList ,AbstractList和iterator在remove时会抛出异常ConcurrentModificationException

/修改次数,替换,删除,排序都算修改 listIterator(final int index);} //ArrayList继承AbstractList ArrayList extends AbstractList {//list.remvove(e)实际调用方法 fastRemove(e) {//不执行checkForComodification } private class Itr implements Iterator < E > {

2023-03-23 13:01:39 516

原创 MySQL执行计划extra中常见类型using index 和 using where using index 的区别

MySQL执行计划extra中的using index 和 using where using index 的区别。mysql执行计划中的extra列中表明了执行计划的每一步中的实现细节,其中包含了与索引相关的一些细节信息。其中跟索引有关的using index 在不同的情况下会出现。

2023-03-20 16:39:20 751

转载 mysql驱动表与被驱动表及join优化

MySQL 表关联的算法是 Nest Loop Join,是通过驱动表的结果集作为循环基础数据,然后一条一条地通过该结果集中的数据作为过滤条件到下一个表中查询数据。忘了补充一句,也可以通过EXPLAIN分析来判断在sql中谁是驱动表,EXPLAIN语句分析出来的第一行的表即是驱动表。3.当使用join时,mysql会选择数据量比较小的表作为驱动表,大表作为被驱动表。如果A表,B表数据量差不多大的时候,那么选择谁作为驱动表也是无所谓了。1.当使用left join时,左表是驱动表,右表是被驱动表。

2023-03-20 14:13:54 2163

原创 使用Markdown写出一份漂亮的简历

风格简洁大方,言简意赅,这是我对它的定义,至于你怎么定义它管我什么事。

2023-01-30 17:17:28 5636

原创 GO-IM系统

https://github.com/alberliu/goim 是一个即时通讯服务器,代码全部使用golang完成,主要使用mysql (多设备,消息不丢不重) 官网https://goim.io/https://github.com/Terry-Ye/im纯go实现的分布式im即时通讯系统,各层可单独部署,之间通过rpc通讯,基于redis 做消息推送,比较适合做直播间消息。http://gglinux.com/2017/04/15/IM_design/IM系统设计。

2023-01-28 16:51:35 1750

原创 Caffeine和Disruptor 标记下-有空再写经过

SpringBoot Disruptor 简单封装。Spring Boot缓存实战 Caffeine。Disruptor 介绍。

2023-01-13 19:04:50 163

原创 Swagger2时启动控制台输出大量 Generating unique operation named

多个controller类中的方法名相同,我这里是自己生成的多个controller使用了相同的模板代码,而他们的CRUD方法名没有加上模块名的前缀,从而导致swaggerr扫描时相同的POST方法有相同的方法名从而提示POST重复,但是并不影响正常业务,只是不够规范。直接修改每个controller中的方法名不重复即可,这里我直接加上各个模块的前缀即可。启动服务时,控制台打印大量如下信息。

2023-01-12 11:04:58 979

原创 vue3安装环境

预设项配置信息,最后需要配置一个默认的模板项目名称,下次创建新项目就直接选择这个默认的模板项目名就可以该项目模板创建了,不再走上面的流程,自带相关配置项。空格选择如上选项,回车下一步。进入项目,启动项目如下命令。

2022-09-20 16:25:06 213

原创 Loki+Grafana查询语句

这样一个完整的查询过程就完成了,只不过Grafana在我们添加完Loki服务地址后,会自动帮我们完成前两步的事情,随着我们在Label输入框输入查询表达式时,就相当于完成了query参数的构建,而日期范围通过日期选择器完成。这里的日志集合是满足{}语句的标签筛选后,对集合结果中的所有文本字符进行匹配筛选,就像chrome浏览器ctrl+F的功能,满足条件的才会列出来,不满足的则看不到。日志是由日期,服务系统名称,模块名称等等日志的标签元素组成,就像是表结构中的列名,用以区分每条日志的基本元素。...

2022-08-05 16:11:15 8872

原创 TransmittableThreadLocal实现原理

InheritableThreadLocal只会在线程池中的线程初次创建的时候,从父线程拷贝属性,而父线程再次修改这个属性时,线程池中的这个线程是无法再次感知到的。我们在日常的开发中,很少主动new线程,都是使用线程池,而线程池中,不会频繁的创建线程,更多的场景是线程创建一次,重复使用。如果线程中的属性在上次使用后被修改,下次使用后,子线程中保存的属性值依然是首次使用时的值TransmittableThreadLocal实现父线程值传递变更值给线程池子线程可以看到,使用TransmittableThrea

2022-07-06 14:23:30 1478

spring注解事务实现demo

声明式事务管理也有两种常用的方式,一种是基于tx和aop名字空间的xml配置文件,另一种就是基于@Transactional注解。显然基于注解的方式更简单易用,更清爽。spring注解事务实现demo

2017-03-07

java调用DDL的简单demo

Test.java 是java源文件 Test.h 是java生成的头文件 Test.class 是java生成的编译文件 Test.dll 是c编译的动态链接库文件(32位系统) 以上仅在32位window系统上可以运行,64位则需在64位的vc下编译 详情参考 http://blog.youkuaiyun.com/zjcjava/article/details/47164881

2015-07-31

Pushle.zip

Pushlet 是一个开源的 Comet 框架,在设计上有很多值得借鉴的地方,对于开发轻量级的 Comet 应用很有参考价值

2014-04-20

飞秋FeiQ局域网聊天软件

局域网聊天软件 飞秋(FeiQ)是一款局域网聊天传送文件的绿色软件,它参考了飞鸽传书(IPMSG)和 QQ, 完全兼容飞鸽传书(IPMSG)协议,具有局域网传送方便,速度快

2013-03-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除