自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 Hudi-IDEA编程

配置详见【1.Scala配置】依赖详见【1.Hudi+Spark+Kafka依赖】1-2 从Kafka/CSV文件读取数据1-3 ETL转换后存储至Hudi表中1-4 SparkSQL加载Hudi表数据并分析二、Hudi+Flink+Kafka(Java)依赖详见【2.Hudi+Flink+Kafka依赖】第1步获取表执行环境无需赘述。第2步创建输入表:指定了Kafka的服务IP和端口、topic等信息,从这里读取数据第3步中转换数据为Hudi表中需要的格式(添加两个必须字段:数据合并字段t

2024-04-17 13:44:46 790

原创 Hudi-ubuntu环境搭建

二是基于日志,这也是业界广泛使用的一种方式,一般是通过binlog方式,变更的记录会写入binlog,解析binlog后会写入消息系统,或直接基于Flink CDC进行处理。一是基于查询的,客户端会通过SQL方式查询源库表变更数据,然后对外发送。这种 CDC 技术是入侵式的,需要在数据源执行 SQL 语句。,即变更数据捕获,主要面向数据库的变更,是是数据库领域非常常见的技术,主要用于捕获数据库的一些变更,然后可以把变更数据发送到下游。警告对于指令执行并没有什么影响,但还是看着不舒服,通过这种方式可以解决。

2024-04-11 16:47:53 1059

原创 Hudi原理学习

第四步:如果是 update 消息,写对应的 file group + file slice,直接 append 最新的 log file(如果碰巧是当前最小的小文件,会 merge base file,生成新的 file slice)log file 大小达到阈值会 roll over 一个新的。第三步:如果有小的 base file 文件,merge base file,生成新的 FileSlice + base file,否则直接写新的 FileSlice + base file;

2024-04-11 16:45:26 991

原创 记录一个@Transaction注解引发的bug

记录一个@Transactional(readOnly = true)注解引发的bug。

2023-10-11 15:38:15 836

原创 Uniapp学习之从零开始写一个简单的小程序demo(新建页面,通过导航切换页面,发送请求)

先把官网文档摆在这,后面会用到的。

2023-09-05 17:37:36 1667 4

原创 Jmeter学习和一个关于jmeter获取X-XSRF-TOKEN时的坑

所以整理之后的脚本进行合理的调整后应该长这样:其中的每个部件:(1)全局HTTP Cookie管理器(2)全局HTTP请求头(3)登录前置事务管理器、边界表达式提取器登录前置事务管理器边界表达式提取器(4)登录事务管理器、登录请求头、json提取器登录事务管理器登录请求头json提取器(5)业务事务管理器、业务请求头业务事务管理器业务请求头(6)结果树。

2023-08-07 11:27:04 1523

原创 Lua脚本在redis中的使用学习

不同于之前遇到的redisTemplate的简单set、get方法,这里是使用Redis脚本执行redis操作。

2023-06-07 16:22:06 2306

原创 记一次通过binlog日志恢复MySQL数据库的经历

起因是我在自己服务器上搭建的博客被黑客攻击,黑客删除了我的数据库并且要求支付比特币才给我恢复。博客所有的表和数据都被清空,只留下了勒索金额和地址。如图。

2023-06-01 18:09:24 1935

原创 Java——redis通过改写部分源码实现动态db-操作数据库的时候可以指定db操作

*** 存放对应库的redisTemplate,用于操作对应的db/*** 当不指定库时默认使用的redisTemplate/*** 当类被加载到容器中属性设置完毕后检查redisTemplates和defaultRedisTemplate是否为空} } /*** 获取要操作的RedisTemplate// 当前要操作的DB Object lookupKey = determineCurrentLookupKey();

2023-03-27 18:15:30 864 1

原创 Java——位运算符

在上面的byte[]数组转String的例子中:假如我们有一个byte数组[35, 36, 37, 38, 39, 40]。如果把value的类型改成long,long类型最多可以存储64位的数字,那么位运算的大小限制就扩大了一倍,也就是,左移8位这个操作可以执行7次,即,length的大小最多为8。进行遍历^ =运算,结果是4,也就是把前面两两相等的数字都清除掉了,留下没有可以配对两两抵消的数字4。,length一旦超过4,就只能取到byte[]数组最后的4位转换之后的结果。

2023-02-20 11:05:01 515

原创 Java——进制转换的一些内容

【代码】Java——进制转换的一些内容。

2023-02-14 10:42:35 298

原创 记录一些遇见的bug——记录一个使用多线程异步调用openfeign时子线程丢失request请求头导致的空指针异常错误

获取request对象的请求头时报了空指针异常,意思就是主线程中的请求头并没有带过来。在主线程里调用子线程时将request传递过去,并设置子线程的请求头。查看feign配置FeignConfig.java。

2023-02-13 09:02:08 930

原创 Java——使用多线程从list中不重复地取出数据并进行处理,给多线程任务添加单项任务计时和总耗时

大部分的业务都不是独立运行的,会有参数传递到业务中,如果需要多线程调用的业务有主线程的参数需要传递过去,就可以把参数写在实现了Runnable接口的业务类的私有属性中,用业务类的构造方法传参。在业务里,使用多个线程并行处理业务能够极大的加快处理速度,但是如果我们需要明确掌握每次处理业务的耗时,和所有业务处理完成的总耗时,就可以通过CountDownLatch来帮我们实现。把处理数据的方法写在处理类中重写的Runnable接口的run()方法中。在方法中调用了属性num。添加了以上属性的构造方法。

2023-01-03 10:42:24 2221 6

原创 SpringSecurity——OAuth2框架鉴权实现源码分析

这个过滤器下涉及到的类有以下12个类,大致作用是从请求中提取authentication,从authentication中获取token,判断是否为空,是否有效,是否过期。在springSecurityFilterChain过滤器链中,首先初始化一个FilterChainProxy过滤器链代理对象,在这个过滤器链代理对象中有一个过滤器链集合,每一个过滤器链都有一组过滤器来处理不同的请求。其中的第五条过滤器链springSecurityFilterChain是本文要讨论的对象。

2022-12-30 14:35:15 1254 1

原创 JAVA——把一批压缩文件中存放的部分数据进行处理(替换)

有一批已经压缩存档的数据文件(压缩文件格式为.tar.gz,解压后为.txt文件),现在需要把每个文件中符合需要的字段数据进行更改替换,因为文件量大,需要替换的字段数据有明确共同点(数据在文件每一行中所处同一个位置),因此写个脚本来处理是比较省时的做法。2.读取解压后的文件并且按照一定逻辑处理。

2022-12-23 18:13:38 1412 2

原创 MYSQL——毫秒值和日期类型数据的转换,DATE_SUB的用法

语法:FROM_UNIXTIME(毫秒值字段,‘%Y-%m-%d %h:%i:%s’)举例:效果如图所示:语法:UNIX_TIMESTAMP((日期类型字段)举例:效果如图所示:转换后的数据会自带六位小数,可以用ROUND()取整,如图所示:语法:DATE_SUB(date类型字段,INTERVAL 6 DAY)举例:以图1中的查询结果为例,可以使用DATE_SUB函数查出目标时间减去若干天的数据,此处减去6天效果如图所示:

2022-12-06 17:17:33 4346

原创 Postman的使用——设置全局参数,参数的传递,从登录接口的响应body中提取数据更新全局参数,从响应cookie中提取数据更新全局变量

如图所示,进入postman后先后点这两个位置(①Environment quick look;②Edit),新增全局变量city和XSRF-TOKEN。如图所示,在需要调用的接口请求头参数里引用上面定义的全局变量,语法:{{定义的变量名}}运行之后可以从第一步的Environment quick look处点击看到取到的值。类似apifox中的后置操作。

2022-12-02 16:41:08 3511

原创 JAVA——通过自定义注解实现每次程序启动时,自动扫描被注解的方法,获取其路径及访问该路径所需的权限并写入数据库

在需要扫描的微服务项目中新建一个自定义注解,因为这里定义的注解用于鉴权,因此给该注解取名叫做MyAccessControlAnnotation//@Retention--用于指定注解保留范围:SOURCE源码 --> CLASS字节码 --> RUNTIME运行 @Retention(RetentionPolicy . RUNTIME) //@Target--用于标记这个注解应该是哪种 Java 成员,METHOD用于放方法头上 @Target({

2022-09-20 18:04:02 2678

原创 记录一些遇见的bug——调用增加方法报错line 1:43 no viable alternative at input ‘<EOF>‘ line 1:43 mismatched input ‘<EO

报错截图:错误代码:二、问题原因报错提示SQL语句执行错误。具体是给SQL语句的参数赋值的时候出的问题。检查了下发现,调用新增方法,传入的是对象,但方法接收的时候没有加@RequestBody注解,如图所示:在方法的接收参数处加上@RequestBody注解,表明传递的是对象。

2022-09-20 16:35:50 1404

原创 记录一些遇见的bug——项目启动报错Parameter 1 of constructor in com.example.filter.SimpleGlobalFilter required a bea

报错截图:错误代码:二、问题原因上午运行得好好的代码,啥都没改下午程序突然就挂了,死活起不来,就报如图所示错误。让程序猿忍不住怀疑人生,开始相信运行程序之前需要洗手焚香的传说…重点是啥都没改。。然后原因是,本微服务(gateway)中引用了自己写的工具类commons-util工具类,如图所示:而commons-util工具类中引用了redis依赖没有排除,与gateway微服务中引用的redis-reactive依赖造成冲突。有时候A依赖覆盖B依赖,这时候程序可以正常运行。有时候B依赖占

2022-09-19 20:08:42 4377

原创 记录一些遇见的bug——项目启动报错org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.e

报错截图:错误代码:二、问题原因虽然看起来是一个空指针异常,但真正的原因在第二张报错截图上:也就是如下内容:因为数据库表中有个字段名叫desc,如图所示:desc是MySQL语法中的关键字,mybatis plus自动生成的sql中因为这个关键字的影响,就造成了语法错误。方案1:更换字段名为非MySQL关键字即可。例如此处我把字段名改成describer,同时更改Java中的实体类属性名。clean之后再次运行,项目顺利启动不再报错。方案2:不使用mybatis plus ,更换成

2022-09-17 11:02:05 3492

原创 Docker——使用docker工具管理软件/组件的运行,镜像、容器、数据卷的基本概念,常用指令,使用docker搭建Java微服务运行环境

使用docker工具管理软件/组件的运行,镜像、容器、数据卷的基本概念,常用指令,使用docker搭建Java微服务运行环境

2022-08-31 20:00:51 433

原创 Vue——webpack项目(没有安装vue-cli脚手架时)解决请求项目启动问题、跨域问题和请求转发报404的问题

项目没有使用 vue-cli 或者 @vue/cli ,直接使用 webpack ,这样起作用的配置文件就是 config/index.js ,所以,在项目根目录下扔一个 vue.config.js 扔了也白仍。即,我当前vue项目的端口号是9001,当遇到请求以/api开头时,就把该请求转发到端口号为8080的后端Java项目。使浏览器访问的IP地址和vue项目中配置的IP地址一致,即,同时为localhost或者同时为127.0.0.1。在解决了以上的跨域问题后发现,无论怎么调试,请求永远报404。..

2022-08-11 11:16:21 1179

原创 记录一些遇见的bug——Lombok和Mapstruct的冲突导致,A component required a bean of type ‘com.XXX.controller.converter.

由于 MapStruct 依赖于 JavaBean 中有 getter/setter 方法,所以,如果使用了 lombok 来生成 getter/setter 方法的话,那么在配置上有一些特殊的地方:需要 lombok 先对 .class 文件"动手脚",然后 MapStruct 再来对 .class 文件"动手脚"。如果你的项目同时使用了Lombok和Mapstruct工具,写了dto转换类,例如下面的BrandConverter转换类。未找到BrandConverter的bean。再次启动,不再报错。.

2022-08-10 20:09:42 1153

原创 Vue——ElementUI+Echarts将数据以柱形图展示

定义方法RenderEcharts(obj),用于生成柱状图,参数obj指我们用于生成柱形图的数据//柱状图 RenderEcharts(obj) {// console.log('单位主协办情况');});title : {text : '单位主协办数量分析' , subtext : '' } , tooltip : {data : [ '主办' , '协办' ] } , toolbox : {...

2022-08-05 16:53:46 4803

原创 Linux——在Linux系统上打包和部署springboot+vue项目,nginx+mysql+redis+minio

使用java -jar springboot-affair-0.0.1-SNAPSHOT.jar命令运行Java项目。在浏览器中输入网址http://192.168.78.128:80,按回车,自动重定向到登录页,环境搭建成功!打包的目录下,打包后会出现一个target目录,进入目录可以看到打好的jar包。进入拉取下来的前端代码所在的src目录下,输入npm run build命令。最后,以上项目都完成后,可以通过虚拟机IP+Nginx配置的端口号访问系统。最后可以查看npm版本即为安装成功。.......

2022-08-05 16:13:45 2608 1

原创 Linux——在Linux系统上安装、启动和配置Nginx

nginx 的配置文件是 /etc/nginx 目录下的 nginx.conf 文件。修改 nginx 的配置文件后,使用如下命令重启 neginx。

2022-08-05 15:59:51 1267

原创 Linux——在Linux系统上安装和启动MinIO

将 /data 替换为你希望 MinIO 存储数据的驱动器或目录的路径。

2022-08-05 15:50:11 5196

原创 Linux——在Linux系统上安装和启动Redis

默认情况下,redis 只允许从本地发起连接。所以,如果我们要从「别处」连接 redis server ,需要修改配置放开这个限制。redis 的配置文件在 /etc 目录下,名为 redis.conf。

2022-08-05 15:43:43 225

原创 Linux——在Linux系统上安装和启动MySQL

代码】Linux——在Linux系统上安装和启动MySQL。

2022-08-05 15:30:29 598

原创 记录一些遇见的bug——springBoot+minio文件上传为txt文件时,如果上传时编码格式不是utf-8,就会出现通过文件链接直接在windows窗口预览文件,文件内容乱码问题

springBoot项目上传文件到minio上,获取到文件url,直接在浏览器访问url(即预览文件)时,文件格式为txt时,会出现文件乱码问题。上传txt文件前,创建fileUtil工具类:手动设置txt文件编码格式后再上传。txt文件不是utf-8编码。......

2022-08-04 22:40:17 3051

原创 MySQL——case when 的用法,纵向统计数据-类似数据透视表

查询所有单位的主办事项和协办事项数量(主办:host;查询每个督办单进度百分比,同时关联督办单表获取督办单名。督办单表:(每个督办单可以对应多个事项状态)每个事项有一个主办单位和多个协办单位。督办单-事项表:(事项状态3为已完成)...

2022-08-04 22:15:01 466

原创 记录一些遇见的bug——关于Lombok的一个大坑,使用@RequestBody接收axios请求对象时,对象所有属性均为null

使用idea工具的Generate一键生成的set和get方法与springboot框架的默认方法一样,首字母没有大写,就可以拿到值了。各种研究各种试,排除了各种错误可能,前台没有多一个或者少一个逗号,后台逻辑也没问题,前台代码后台代码各种方法重写了6遍,还是接收不到。而Lombok利用反射,默认将所有属性的首字母大写来生成set和get方法,写出来的是setNContent()!springboot默认的方法是setnContent(),没有把属性名的首字母大写。拿不到数据问题不大,问题是它也不报错。..

2022-07-30 14:49:00 497

原创 记录一些遇见的bug——mapstruct和lombok同时使用时,转换实体类时数据丢失问题

使用mapstruct转换实体类时发现,转换后的po类数据全部为null,查看编译后的class文件发现,应该转换的目标po类对象并没有转换,而是new了一个新对象,没有给它的属性赋值。lombok自动生成的setget方法与idea工具生成的不同,clean之后重新编译,转换后的数据正常,如图所示。手动写下po类的setget方法。所以又是坑爹的lombok。......

2022-07-30 14:26:40 1306 1

原创 记录一些遇见的bug——axios请求报500,后端报错com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serial

再查看dto类,尝试将@Data注解换成手动生成setget方法,数据不再丢失。经过调试发现,请求走到这里还是正常的,获取的list结果有值。总之原因是在于转换时数据丢失导致报错。手动写下dto类的setget方法。所以又是坑爹的lombok。不要用lombok注解。......

2022-07-29 19:01:29 1228 1

原创 JAVA——springSecurity——自定义配置的一些补充:Anonymous匿名用户、重写loadUserByUsername()方法、自定义WebSecurityConfig配置等

publicstaticResponseResultSUCCESS=newResponseResult(200,"成功");publicstaticResponseResultINTEVER_ERROR=newResponseResult(500,"服务器错误");主要有三项1.SpringSecurity自带HttpBasic基础认证模式2.默认formLogin表单模式。

2022-07-16 12:27:10 853

原创 JAVA——springSecurity——底层原理分析:处理认证请求和非认证请求的流程,主要过滤器链的作用

在加载时启动一个叫DelegatingFilterProxy的过滤器代理对象,让spring管理这些过滤器的生命周期DelegatingFilterProxy类——doFilter()2.初始化一个FilterChainProxy过滤器链代理对象初始化一个过滤链FilterChainProxy过滤器链的代理对象,在这个过滤器链代理对象中有一个过滤器链集合,每一个过滤器链都有一组过滤器来处理不同的请求FilterChainProxy类——doFilter()AbstractAuthenticationP

2022-07-16 12:21:21 333

原创 JAVA——底层源码阅读——集合ArrayList的实现底层源码分析

JAVA——底层源码阅读——集合ArrayList的实现底层源码分析一、提出问题二、查看ArrayList源码步骤1、新建java文件,把代码敲上去如下步骤2、查看源码。1、增add()2、删remove()3、改set()4、查get()步骤3、阅读和分析源码。三、尝试自定义ArrayList当前 jdk版本:jdk1.8.0_74一、提出问题集合ArrayList的底层原理是什么,它的增删改查是怎么实现的,为什么它的长度是可变的?二、查看ArrayList源码步骤1、新建java文件,把代

2022-05-18 15:35:15 727

原创 MySQL数据库——通过事务控制多条sql同时执行,如果成功就把数据全部写入硬盘,否则全部回滚

MySQL数据库——事务一、概念(1)事务的定义(2)事务的用途(3)事务的分类(4)事务的特性(5)执行事务的步骤一、举例1、开启事务2、执行sql3、判断sql执行结果4、关闭事务一、概念(1)事务的定义组成一个业务的多条sql语句要么全部成功,要么全部失败,就是事务。(2)事务的用途以银行转账问题为例:假定资金从账户A转到账户B,至少需要两步账户A的资金减少,然后账户B的资金相应增加若在转账过程中:A资金不够SQL执行失败,但B钱仍然增加了,这势必会导致数据的错误。所以这两个动作是绑定

2022-04-16 12:12:51 5204 1

原创 JAVA——底层源码阅读——包装数据类型Integer.valueOf()自动装箱方法底层源码分析

@TOC*当前 jdk版本:jdk1.8.0_74一、提出问题为什么用==进行比较Integer类型的变量,变量值不同,比较的结果也不同?如下图所示:两个赋值为10的Integer类型变量比较结果相同,两个赋值为128的Integerlei类型变量比较结果不同。二、查看源码方法途径1、查看本地文件(不推荐)1.打开Java安装路径,查看根目录,发现一个src的压缩包,这个压缩包里存放的就是jdk的源码。2.可以通过解压文件夹,如图所示按照需要查看对应路径文件途径2、在编辑器里查看jdk

2022-04-13 15:47:05 1018

空空如也

空空如也

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

TA关注的人

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