自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 资源 (1)
  • 收藏
  • 关注

原创 批量生成数据入库的方案

批量生成数据入库的方案

2021-12-29 14:48:35 643

原创 dubbo 直连解决方案

要做什么看dubbo官网后发现有dubbo直连这种方式,简化了我们开发环境的流程,不再需要启动注册中心。于是想要应用到自己项目中去。但是各类网站看了很多dubbo直连的案例,基本都和官网一致,一个一个service 指定 url,这样的方式不太符合我们自己项目,我想要的是所有的service 使用 dubbo://127.0.0.1:20880 urldubbo版本:2.7.8源码过程分析这里先创建的一个又Spring 管理的Controller, 其中只有一个属性且被Reference 注解标识

2021-09-29 16:47:00 641

原创 dubbo 循环调用本服务

服务AB,A调用服务B,B中出现了调用自己,而这次调用也是通过dubbo调用B调用B,讲道理应该使用spring调用本身,而原来也没有问题,只是这次加个dubbo过滤器,导致本服务抛出的自定义异常被dubbo包装了一下无法识别,抛出意料之外的异常...

2021-06-28 18:50:35 430

原创 MySQL oreder by的单路排序和双路排序

innodb存储引擎的排序分为两大类,索引排序和文件排序,索引排序效率肯定是优于文件排序的,所以请尽可能的使用索引排序。如何去查看sql语句是利用了哪种排序方式答案就在explain关键字,查看sql语句的执行计划,我们可以从mysql官网看到If the Extra column of EXPLAIN output does not contain Using filesort, the index is used and a filesort is not performed.If the E

2021-06-03 16:42:02 479 2

原创 mysql join原理

MySQL join表共有三种匹配方式,以A left join B为例进行描述,A left join B是以A表为驱动表,B表为匹配表进行连接一、Nested-Loop Join Algorithm(简单的嵌套循环连接)一种简单的嵌套循环连接(NLJ)算法,循环从A表中读取每一行,然后将每一行与B表中的每一行进行匹配,其实就是两层for循环。for each A_row in A { for each B_row in B { if (A_row.fid == B_row.fid)

2021-05-14 11:27:01 147

原创 大文件断点续传

public void uploadBySlice(UploadFileReq uploadFileReq) { byte[] bytes = uploadFileReq.getBytes(); if(bytes==null){ throw new ServiceException("请上传文件"); } String base = sysConfig.getStaticArticleAccessPath().sub.

2021-02-20 09:27:13 117

原创 MultipartFile transferTo 发生异常,提示临时文件不存在

事情是这样的,当我多次调用了两次transferTo转储到本地磁盘时,遇到了报错/T/tomcat.xxx/work/Tomcat/localhost/ROOT/upload_eb3c7c46_060c_4247_86c0_9ae0ce59943b_00000000.tmp (No such file or directory)这里可以看出来,首先接口接收到MultipartFile 文件时,会自动在临时目录创建临时文件,transferTo 实际上是将临时文件rename。创建文件,然后写入这个文件。

2025-07-28 10:15:21 227

原创 MCP介绍与使用

MCP(Model Context Protocol,模型上下文协议) ,2024年11月底,由 Anthropic 推出的一种开放标准,旨在统一大型语言模型(LLM)与外部数据源或工具之间的通信协议。MCP 的主要目的在于解决当前 AI 模型因数据孤岛限制而无法充分发挥潜力的难题,MCP 使得 AI 应用能够安全地访问和操作本地及远程数据,为 AI 应用提供了连接万物的接口。

2025-04-27 16:15:38 544

原创 flowable 工作流使用

创建Springboot2.1.x项目,引入flowable依赖org.flowableflowable-spring-boot-starter6.3.0定义工作流所用的xml文件,我这是使用的docker+flowable_uidocker run -p 8086:8080 flowable/flowable-ui -d 本地快速部署flowable_uihttp://localhost:8086/flowable-ui/ 访问页面,默认账号密码是 admin/test创建流程,或根据已有

2025-04-17 09:20:58 714

原创 Springboot引用外部jar包作为依赖

有时我们会使用一些三方厂商给我们的SDK,或者是我们想要为合作团队提供一个SDK,但是因没有共同的maven仓库,只能提供出一个jar包供其使用,本篇文章将介绍如何去引入一个外部jar包使用。

2024-12-09 16:05:24 355

原创 mybatis resultMap标签注意事项(pageHelper结合使用的坑)

在使用mybatis时,我们经常会使用在xml文件中编写一些复杂的sql语句,例如多表的join,在映射实体类时,又会使用到resultMap,将查询的数据库字段与实体类字段进行映射对照。resultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC 不支持的操作。实际上,在为一些比如连接的复杂语句编写映射代码的时候,一份 resultMap 能够代替实现同等功能的数千行代码。

2024-11-04 16:21:20 531

原创 积木报表安全漏洞

AviatorScript表达式注入漏洞复现及解决。

2024-10-25 11:15:52 711

原创 分布式本地缓存 ehcache 缓存同步复制

使用spring cache的方式缓存是在本地内存中的,当部署多台实例缓存无法共享缓存,导致登录状态异常等问题。ehcache 分为2.x和3.x版本,差异比较大,我这使用的是2.10.9.2 版本;比较常见的同步方式(1)RMIrmi 是ehcache本身支持的,不需要引入其他jar包;(2)JGroups 需要引入其他jar包,配置好后部署会比较方便我这里用的是RMI的同步方式系统需要部署两份,机器ip分别为10.59.0.1 和 10.59.0.2。

2024-09-12 18:18:07 859

原创 kafka rocketmq rabbitmq相同差异点

而rocketmq,每个主题消息被投递到不同的queue中,而所有消息(整个brocker)存储到commitlog中,每个主题每个队列都会创建一个索引文件,指向commitlog文件。消息存储的结构不同,kafka 每个主题被分成了多个分区(partition),磁盘中按找每个分区来存储,消息存储到一个文件,索引存储到一个文件。生产者投递消息的确认机制不同,kafka 是不等待响应,等待master响应,等待所有响应。rocketmq 支持事务消息,延迟消息,标签过滤。

2024-07-26 16:47:57 230

原创 我觉得我的代码更优雅了

我是一个工作两年半的后端程序员最近在思考如果更好的完成工作,追求效率的同时尽可能使自己的代码内聚,解耦,方便后期自己或是其他同时的维护工作我们业务中某一个对象的属性,但是获取之前需要进行多条件判断, 判断这个属性是否还是有效状态, 因此模仿写了一个包装类AWraaper,实现某个接口在写一个流程接口的时候, 流程分3步骤, 分别对应三个接口,每一步的处理的逻辑有一定的相似度, 逻辑校验, 保存数据, 通知,等等。所以这里选择了模板方法, 定义抽象类, handle 公共方法, 子类 step1,

2024-07-23 16:27:19 263

原创 技术 AI

Sora 基于DALL-E技术的视频生成模型。GPT-4.0 Vision(AI识图)Llama (meta 公司)DALL·E3(AI绘画)Claude (亚马逊)genmini (谷歌)

2024-07-23 16:25:31 180

原创 websocket消息处理失败排查(redis大key)

于是排查websocket + redis问题, 测试发现 redis本身的连接没有问题,只是某次差点寻会有问题。想到大key的问题,在测试环境复现,复制粘贴大量数据走 websocket 确实会出现断连的情况。调用grpc 超时失败, 起初是认为grpc 的问题, 于是开了个python脚本 访问grpc,没有问题, 表示grpc 服务端正常。访问 http://127.0.0.1:9121/ ,显示正常这一步则没有问题。我们本身是有prometheus 和 grafana 的,

2024-04-18 10:51:43 625 1

原创 rabbitmq消费者配置

消费者重启(断开连接)后,队列中未确认的消息会回到队列头重新消费。rabbitmq 配置。

2023-07-26 19:29:58 382

原创 spring boot自动装配的原理是什么

spring 时代,开启注解需要在xml中配置component-scan,然后触发标签解析,解析时根据标签的annotation-config属性将configrationPostProcesser注册进spring,由其完成注解的解析工作而springboot,在自己的prepareContext 方法中将configrationPostProcesser注册进去...

2022-04-11 20:33:39 552

原创 spring中线程池默认大小(源码)

@ConditionalOnClass(ThreadPoolTaskExecutor.class)@Configuration(proxyBeanMethods = false)@EnableConfigurationProperties(TaskExecutionProperties.class)public class TaskExecutionAutoConfiguration { /** * Bean name of the application {@link TaskExecuto

2021-11-25 17:26:17 1162

原创 ELK日志收集搭建过程中的一些问题

一、es 7.x 版本需要jdk11的支持二、es配置外网访问config/elasticsearch.yml 添加 http.host: 0.0.0.0三、es启动失败 不允许以root用户启动,创建一个新用户启动即可四、logstash启动失败 缺少log4J插件

2021-11-14 15:28:57 1532

原创 mysql 自定义变量使用

set @a = now(), @b = now();SELECT *, @ax, @bx, @mxFROM atestWHERE ( @mx := IF (( @ax := DATE_ADD( af, INTERVAL 48 HOUR )) < ( @bx := DATE_ADD( DATE(bf), INTERVAL "2 8 30" DAY_MINUTE )), 1, 2 )) > 0 af, bf 两个字段都为日期字段写在where条件后的赋值语句 必须

2021-10-19 13:35:56 195

原创 解析rar5压缩文件

public static void unRar5(File rarFile, String outDir) throws Exception { IInArchive archive; RandomAccessFile randomAccessFile; // 第一个参数是需要解压的压缩包路径,第二个参数参考JdkAPI文档的RandomAccessFile //r代表以只读的方式打开文本,也就意味着不能用write来操作文件

2021-10-12 22:39:03 768 2

原创 RequestPart注解实现同时上传json 和 文件

最近要改造一个接口,原本是json传参,现在要加个文件,emmRequestPart 可以帮我们做到,不同的key 以不同的content type解析后端代码@PostMapping("test") @ResponseBody public String test(@RequestPart("customer") Customer customer, @RequestPart MultipartFile file){ System.out.println(file.g

2021-10-11 21:02:13 909

原创 spring 事务传播验证

package com.example.flyway.service;import com.example.flyway.bean.User;import com.example.flyway.mapper.UserMapper;import org.springframework.aop.support.AopUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframewor

2021-09-11 16:05:33 161

原创 druid部分配置

druid 在1.1.18版本后需要手动配置开启监控,默认监控不开启,可以查看DruidStatViewServletConfiguration的变动1、开启监控spring.datasource.druid.stat-view-servlet.enabled=false2、只有本机能够访问页面#允许外部访问spring.datasource.druid.stat-view-servlet.allow=3、碰到sql监控中没有数据spring.datasource.druid.filters

2021-09-11 14:31:28 779

原创 项目升级mybatis-plus全局查找并替换方法

shareRecordMapper.selectListCustomer(([a-zA-Z.()\n\s]+))// 用 . 的时候获取不到$1shareRecordMapper.selectListCustomer(([a-zA-Z0-9.()\n\s]+)) // 可以匹配到数字, 这个没测shareRecordMapper.selectList(new LambdaQueryWrapper($1))

2021-09-08 18:03:01 534

原创 mysql中,如果单行占用太长的空间,在聚集索引中应该如何存储?

技术交流群中,有人问出了一个这样的问题,如果一行占用空间大于16K,那么是不是就存不进页了。针对这个问题查了一下官网,最终终于查出结果可变长度列太长而不适合 B 树页的可变长度列存储在单独分配的磁盘页上,称为溢出页。此类列称为页外列。页外列的值存储在溢出页的单链接中,每个这样的列都有自己的一个或多个溢出页面列表。根据列长度,可变长度列值的全部或前缀存储在 B 树中,以避免浪费存储空间和读取单独的页面。参考:14.11 InnoDB Row Formats...

2021-09-06 15:56:23 512

原创 重写的finalize方法,每个对象只会被调用一次?

在finalize方法注释上看到了“对于任何给定对象,Java 虚拟机永远不会多次调用finalize方法。”那是不是意味着一个对象只能被复活一次呢?

2021-08-31 17:52:19 852

原创 juc包下的线程间协作用到的类

1、CountDownLatch内部类实现aqs,使用cas修改state值完成同步2、CyclicBarrier内部使用独占锁实现+condition实现,构造函数可以传入回调任务,在屏障被冲破时执行(在冲破屏障的线程中执行)。维护了parties,count两个变量,每有一个线程waite阻塞时,–count,当count == 0时,调用condition的signalAll唤醒所有线程先执行回调任务,然后唤醒所有线程,之后count重置为parties可以重复使用3、Semaphore

2021-08-29 21:44:47 133

原创 线程池是如何线程复用的?

调用方法execute判断是否线程池的当先线程数小于核心线程数如果小于:调用addWorker方法通过线程工厂创建Thread对象并封装成worker对象,且开启线程,先执行本任务,然后循环获取队列中的任务执行如果等于:直接将传入的runnable对象加入的队列中等待执行...

2021-08-29 13:06:36 139

原创 关于aqs疑惑的地方

在调用lock方法时候,可能能为资源竞争, 导致该线程被阻塞加入到aqs等待队列中,在获取锁的线程调用realease方法后, 该线程被唤醒(locksupport),从代码上来看 说白了 阻塞线程 调用lock方法时,,实际上就是被加入到等待队列,然后进行阻塞,那么问题来了 , 被唤醒时候是会直接执行后续代码,还是继续竞争锁呢,从书的第124页上来看是竞争所,但是lock方法已经被执行过了,为什么还会再执行呢?通过debug 发现lock方法阅读不充分,java.util.concurrent.loc

2021-08-28 18:17:48 98

原创 Xorshift 生成随机数

static final int advanceProbe(int probe) { probe ^= probe << 13; // xorshift probe ^= probe >>> 17; probe ^= probe << 5; UNSAFE.putInt(Thread.currentThread(), PROBE, probe); return probe; }

2021-08-28 17:24:37 824

原创 错误开线程的方式导致的bug

1、开线程栈溢出2、使用线程池开线程还同时捕获了异常并向上抛出,且线程池设置了主线程执行的拒绝策略,导致投资者端同时调用接口时候随机出现报错,主线程中执行了这个方法并且被dubbo捕获了异常...

2021-08-27 17:58:57 101

原创 selectById也会出bug?

功能上了生产后,测试给我提了一个bug,导出数据功能报错。马上排查了一下日志,发现一个selectById的sql报错了,马上去查看一下这条数据,由于生产环境,使用审计工具查看数据,并没有发现什么异常,是在没办法,准备将数据迁移到本地debug试试看,在打开数据库时,看到这条数据好像跟刚刚看到的不太一样,仔细对比。审计工具上的结果Navicat 下的结果很明显 00 就是罪魁祸首了,之前没碰过这样的报错信息,一时间也没想到在这里,同时因为审计工具 导致排查花费了更长的时间...

2021-08-09 09:33:15 369

原创 EnumUtils 枚举工具类

public class EnumUtils { public static <T, V, S> S getEnumProperty(T t, Function<T, V> function1, Function<V, S> function2) { return getEnumProperty(t, function1, null, function2); } public static <T, V, S> S ge

2021-08-06 10:16:33 220

原创 pageUtils 工具类

public class PageUtils { public static Page setPageInfo(List list){ PageInfo pageInfo = new PageInfo(list); return setPageInfo(pageInfo); } public static Page setPageInfo(PageInfo pageInfo){ Page page = new Page();

2021-08-06 10:14:57 1074

原创 spring invokeBeanFactoryPostProcess 执行流程

一、外部beanFactoryPostProcessors如果是BeanDefinitionRegistryPostProcessor 实现类,立即执行,然后 add registryProcessors如果不是 add regularPostProcessors二、实现BeanDefinitionRegistryPos

2021-08-05 16:03:08 133

原创 java 根据html生成pdf 实现透明度

原项目中有在使用flying-saucer库来生成pdf,奈何不支持css3样式,然后遇到一个需求,客户要求设置透明度,然而百度一波,发现rgba 和 Opacity都是css3的,我当即就说这功能做不了。说是说了,做还是得做,面向百度搜索了一波,发现了WKHtmlToPdf程序,于是开始安装环境:centos7 x86_64wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox-0.12

2021-07-27 18:01:18 282

原创 git revert后再merge

在自己的分支上进行需求的开发1、提交了A,B节点后2、合并到master3、此时因为需求变更等,这个这需求延期到下一个版本4、revert (2)的merge节点5、自己的分支再次提交了C节点6、向master合并的时候发现并没有AB节点的内容。7、reset(6)操作,需要先revert (4)产生的节点8、再次merge...

2021-07-21 14:03:55 1228

easy code 生成crud代码

column.obj.name 可以获取原列名,解决mysql字段小驼峰时,生成属性全为小写

2021-09-08

空空如也

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

TA关注的人

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