自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

批量生成数据入库的方案

2021-12-29 14:48:35 543

原创 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 502

原创 dubbo 循环调用本服务

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

2021-06-28 18:50:35 317

原创 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 306

原创 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 64

原创 大文件断点续传

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 74

原创 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 442 1

原创 rabbitmq消费者配置

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

2023-07-26 19:29:58 241

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

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

2022-04-11 20:33:39 488

原创 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 1065

原创 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 1436

原创 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 122

原创 解析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 538 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 761

原创 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 74

原创 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 567

原创 项目升级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 446

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

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

2021-09-06 15:56:23 392

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

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

2021-08-31 17:52:19 745

原创 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 57

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

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

2021-08-29 13:06:36 67

原创 关于aqs疑惑的地方

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

2021-08-28 18:17:48 63

原创 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 648

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

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

2021-08-27 17:58:57 54

原创 selectById也会出bug?

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

2021-08-09 09:33:15 271

原创 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 139

原创 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 987

原创 spring invokeBeanFactoryPostProcess 执行流程

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

2021-08-05 16:03:08 76

原创 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 185

原创 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 778

原创 根据枚举code获取枚举三种方式耗时

package com.example;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.function.Function;import java.util.function.Supplier;public class Test { public static void main(String[] args) { lon

2021-07-15 20:02:59 310

原创 2021-07-12

stream.mapstream.mapToIntstream.flatMapstream.flatMapToIntdistinctsortedpeeklimitskipreduceminmaxcount// stream.flatMapCollection<List<Object>> values = map.values();List<Object> collect = values.stream().flatMap(Collection

2021-07-12 15:40:04 26

原创 mysql编辑集导致大小写不敏感

一个批量上传客户的功能导入的时候,抛出了重复键的异常,这是因为mysql的索引导致,然后通过这个key值上去库中查询这条数据,发现并没有这条数据。然后我尝试将这条数据单独放到另一个excel中,可以插入成功,于是猜想是否是mybatis批量插入的bug但想了一下不太可能,因为抛出的异常不同。网上大概搜了一下,搜到了ignore关键字,在程序中加上这个关键字,并且打了下log,发现一共需要插入72条,实际插入成功69,少了三条,嗯??比对了一下,找出插入失败的数据,发现一个共同点,有索引的那个字段都

2021-06-30 16:08:07 53

原创 kafka启动以及整合spring碰到的问题

背景kafka在阿里云服务器上,java客户端在windows上问题问题一:kafka启动失败,The Cluster ID doesn’t match stored clusterId删除log.dirs目录下的meta.properties文件,如果还不行删除zookeeper中kafka相关的目录问题二:kafka正常启动后且命令行可以生产消费消息,客户端连不上kafka打开config/server.properties 配置文件设置listeners=PLAINTEXT://私网i

2021-06-30 11:16:54 183

原创 dubbo 过滤器

一、实现filter二、在META-INF下穿件dubbo文件夹创建com.alibaba.dubbo.rpc.Filter文件xxFilter=全前限定名三、在配置文件中配置dubbo.provider.filter=xxFilter或者在过滤器上加@Activate注解

2021-06-23 10:23:43 181 1

原创 对象转json字符串输出到日志

背景想要将一个对象以json的格式输出到日志中处理使用log,info(JSONObject.toJSONString(invokeLog, true));或者log,info(JSONObject.toJSONString(invokeLog, SerializerFeature.PrettyFormat));第一种实际也是调用的第二种。public class InvokeLog { private int id; private String data;}问题

2021-06-22 18:55:15 1220 2

原创 获取方法返回类型

//如果返回值类型为Result,则不再进行处理 System.out.println("getParameterType" + methodParameter.getParameterType() + "," + methodParameter.getParameterType().equals(ResponseData.class)); System.out.println("getGenericParameterType" + methodParameter.getGe

2021-06-11 11:11:38 426 1

原创 mybatis 批量插入提升效率

背景最近工作中遇到了解析excel,然后批量插入,发现这个插入时间比较长,所以想要进行一些优化,大家可以跳过过程直接看结论背景作)准备工作,创建一张测试表CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `user_age` int(11) DEFAULT NULL COMMENT '年龄', `master` int(11) DEFAULT NU

2021-05-21 16:56:19 1302 5

原创 mysql中left join on多条件与where的区别

为了测试建立两张表A、B表CREATE TABLE `b` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a_id` int(11) NULL DEFAULT NULL, `is_delete` int(1) NULL DEFAULT NULL, `a_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, PRIMARY KEY (`id`

2021-05-12 09:27:03 44

原创 mysql中的时间类型与java日期类的接收

mysql中关于时间的类型共有四个datetime,timestamp,date,time;datetime,timestamp比较相似,都是既有日期又有时间,不同的是timestamp 是时间戳,表示从1970/01/01到现在的毫秒数,因此它的范围是大于1970,而datetime则没有这个限制date表示日期,不包含时间,如果我们使用java date类来接收,时间则是00:00:00,没有范围限制time表示时间,不包含日期,如果我们使用java date类来接收,日期则是1970-01

2021-03-24 17:54:04 2968

easy code 生成crud代码

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

2021-09-08

空空如也

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

TA关注的人

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