自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SQL 中除了写 in 和 not in外,其他写法

如果id2只有1和2, 那么3<>1 且 3<>2 所以3输出了,但是 id2包含空值,那么 3也不等于NULL 所以它不会输出。单独查询 select id1 from test2 是一定会报错: 消息 207,级别 16,状态 1,第 11 行 列名 'id1' 无效。十几分钟,检查了一下 phone在两个表都建了索引,字段类型也是一样的。原来 not in 是不能命中索引的。我想要查询,在test2中不存在的 test1中的 id。我想要查询,在test2中存在的 test1中的id。

2024-04-07 10:21:40 534

原创 Elasticsearch 分享

Metric(指标):分类并对一组文档进行sum、avg等数学运算Bucketing(桶):桶聚合,常规的分类然后计算每个分类的文档数量Pipeline(管道):对聚合的结果再次聚合Matrix(矩阵):可在多个字段上计算,生成矩阵结果。

2024-03-07 14:50:24 971

原创 【Git】 取消上一次commit或push

提醒:使用git push --force命令可能会导致远程仓库、其他成员的仓库和历史版本产生不可逆的影响,因此操作时需要谨慎。在命令行中输入该命令后,你需要编辑撤消的提交信息,以便 Git 创建一个新的提交。如果你需要取消上一次的 Git 提交,有几个不同的方法可以实现。无论你使用的是哪种方法,请确保在撤消提交之前首先备份你的工作。这会将工作树恢复到上一次提交的状态,也就是你上一次提交之前的状态。该命令会列出整个Git仓库的提交历史记录,包括HEAD指针所指向的提交和已经被废弃的提交。

2024-01-17 15:30:40 981

原创 Docker 项目如何使用 Dockerfile 构建镜像

假设我们有一个简单的 Node.js Express 应用,它提供一个基础的 web 服务。app.js:Express 应用的主文件。:定义项目依赖。views/:存放视图文件的目录。public/:存放静态文件的目录。1.1、保持镜像尽可能小:选择合适的基础镜像,例如 Alpine Linux,因为它非常小巧。在构建过程中,只安装必要的包和依赖。1.2、使用多阶段构建:多阶段构建可以帮助减小最终镜像的大小,通过在一个阶段构建应用,然后在另一个阶段只复制必要的文件。1.3、避免安装不必要的软件包。

2024-01-16 17:11:35 1102 1

原创 SpringBoot-Starter 自动锁组件

一个锁需要有的信息有,key,加锁的时间,时间单位,是否尝试加锁,加锁等待时间 等等。(如果还有其他的业务需要,可以添加一个扩展内容,自己去解析处理) 那么这个注解的属性就可以知道有哪些了/*** 锁的基本信息*//*** 锁前缀*//*** 加锁时间*//*** 是否尝试加锁*//*** 等待时间,-1 不等待*//*** 锁时间类型*/重点就在这个切面里面,我们需要在这里完成key的合成,锁的获取与释放。整个过程可以分为以下几步。

2024-01-16 17:07:15 1007

原创 SpringBoot+MyBatis 天猫商城,超级漂亮,接私活必备【附源码】

一个基于SpringBoot的天猫商城项目,快速部署运行,所用技术:MySQL,Druid,Log4j2,Maven,Echarts,Bootstrap ...前台演示后台演示源码地址:https://gitee.com/dont-dance-lightly/tmall_demo.git

2024-01-05 10:26:17 374

原创 项目使用PowerJob

使用简单:提供前端Web界面,允许开发者可视化地完成调度任务的管理(增、删、改、查)、任务运行状态监控和运行日志查看等功能。定时策略完善:支持 CRON 表达式、固定频率、固定延迟和API四种定时调度策略。执行模式丰富:支持单机、广播、Map、MapReduce 四种执行模式,其中 Map/MapReduce 处理器能使开发者寥寥数行代码便获得集群分布式计算的能力。工作流支持。

2024-01-05 10:04:18 1181

原创 SpringCloud微服务架构,适合接私(附源码)

仅允许免费用于学习、毕设、公司项目、私活等。

2024-01-03 16:08:31 833 1

原创 在SpringBoot中重试调用第三方API

Spring Retry是Spring框架提供的一个模块,它通过提供注解或编程方式的方式,帮助我们实现方法级别的重试机制。在Spring Boot中,可以很方便地集成并使用Spring Retry。在Spring Boot项目中,通过集成Spring Retry模块,我们可以优雅地实现对第三方API调用的重试机制。通过@Retryable注解,我们能够很方便地在方法级别上添加重试策略。同时,异步方法和异常类型的支持使得我们能够更灵活地应对不同的业务场景。

2024-01-02 09:57:34 1163 1

原创 SpringBoot 项目部署方案

分享的是springboot打包并结合shell脚本命令部署,重点在分享一个shell程序启动工具,希望能便利工作;profiles指定不同环境的配置maven-assembly-plugin打发布压缩包分享 shenniu_publish.sh程序启动工具linux上使用 shenniu_publish.sh启动程序。

2024-01-02 09:53:48 958

原创 SpringBoot 集成支付宝支付

通过AlipayClient执行request调用SDK生成表单,用HttpServletResponse(浏览器响应的一个流)写表单的内容,创建一个html的网页)--------------------------->执行请求,拿到响应的结果,返回给浏览器;创建AlipayTradePagePayRequest,设置Request参数(参数包含支付宝回调的订单流水号、总金额、我的订单编号)(格式:JSON格式)---------------------------->创建Request,设置参数;

2024-01-02 09:48:50 1033

原创 Spring 在多线程环境下如何确保事务一致性

一次事务的完成通常都是默认在当前线程内完成的,又因为一次事务的执行过程中,涉及到对当前数据库连接Connection的操作,因此为了避免将Connection在事务执行过程中来回传递,我们可以将Connextion绑定到当前事务执行线程对应的ThreadLocalMap内部,顺便还可以将一些其他属性也放入其中进行保存,在Spring中,负责保存这些ThreadLocal属性的实现类由。(这里其实就是责任链模式的应用)事务的结束分为两种情况: 需要进行事务回滚或者事务正常提交,如果是事务回滚,还需要判断。

2023-10-09 15:57:07 549

原创 Java实现添加文字水印、图片水印功能实战

java实现给图片添加水印实现步骤:获取原图片对象信息(本地图片或网络图片)添加水印(设置水印颜色、字体、坐标等)处理输出目标图片。

2023-10-09 15:53:36 1379

原创 项目接口请求合并

请求合并到底有什么意义呢?我们来看下图。假设我们3个用户(用户id分别是1、2、3),现在他们都要查询自己的基本信息,请求到服务器,服务器端请求数据库,发出3次请求。我们都知道数据库连接资源是相当宝贵的,那么我们怎么尽可能节省连接资源呢?这里把数据库换成被调用的远程服务,也是同样的道理。我们改变下思路,如下图所示。我们在服务器端把请求合并,只发出一条SQL查询数据库,数据库返回后,服务器端处理返回数据,根据一个唯一请求ID,把数据分组,返回给对应用户。

2023-10-09 15:50:35 283

原创 忽视日志吃大亏,玩转 SpringBoot 日志

学习完本文,你应当对现在这几个常用框架的有所了解,并能基础应用了。此次我们没有讲源码,也没有深入的讲其配置及进阶使用,这些我们会在后面慢慢学习,可前往[日志专栏][Link2]查看。但现在我希望你能知道的是。一定要写好日志,一定要写好日志,一定要写好日志。重要的事情说三遍!这是区别新人和老鸟的一个重要依据,也是让自己排查问题更轻松的不二法门!另外,现在很多中间件都自己引用了日志插件,我们作为一个整体工程在使用中间件时,要及时发现并解决插件冲突,避免我们自己的日志配置失效,这也是一个程序员该注意的点。

2023-10-09 15:45:18 80

原创 SpringBoot+Redis BitMap 实现签到与统计功能

采用BitMap实现签到功能实现签到接口,将当前用户当天签到信息保存到Redis中我们可以把年和月 作为BitMap的key,然后保存到一个BitMap中,每次签到就到对应的位上把数字从0 变为1,只要是1,就代表是这一天签到了,反之咋没有签到。实现签到接口,将当前用户当天签到信息保存至Redis中说明请求方式POST请求路径/user/sign请求参数无返回值无因为BitMap 底层是基于String数据结构,因此其操作都封装在字符串操作中了。

2023-10-09 15:39:05 309

原创 Post为什么会发送两次请求?

同源策略是一个重要的安全策略,它用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互。如果两个 URL 的协议、主机和端口都相同,我们就称这两个 URL 同源。协议:协议是定义了数据如何在计算机内和之间进行交换的规则的系统,例如 HTTP、HTTPS。主机:是已连接到一个计算机网络的一台电子计算机或其他设备。网络主机可以向网络上的用户或其他节点提供信息资源、服务和应用。使用 TCP/IP 协议族参与网络的计算机也可称为 IP 主机。端口。

2023-10-09 15:34:37 96

原创 SpringBoot 调用外部接口的三种方式

SpringBoot不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。在Spring-Boot项目开发中,存在着本模块的代码需要访问外面模块接口,或外部url链接的需求, 比如在apaas开发过程中需要封装接口在接口中调用apaas提供的接口(像发起流程接口submit等等)下面也是提供了三种方式(不使用**dubbo**的方式)供我们选择。

2023-10-09 15:32:37 859

原创 MyBatis-Plus 内置雪花算法主键重复问题

这个时候我们先看一下我们设置参数有没有生效,为了比较明显看到效果,我们直接设置worker-id为一个固定值20,再断点看一下,我们找到com.baomidou.mybatisplus.core.toolkit.IdWorker这个核心类,获取id的核心方法是com.baomidou.mybatisplus.core.toolkit.IdWorker#getId,那我们就在这里加一个断点看下。先检查了一下服务器时间,都是一样的,然后再看一下workId的生成,我们先看一下源码。那我们就修改配置一下。

2023-10-09 15:30:09 764

原创 ELK 处理 SpringCloud 日志

举个例子,一个 Indexer 在持续读取 Redis 中的记录,现在想加入第二个 Indexer,如果使用 list ,就会出现上一条记录被第一个 Indexer 取走,而下一条记录被第二个 Indexer 取走的情况,两个 Indexer 之间产生了竞争,导致任何一方都没有读到完整的日志。我的Nginx 与 Spring Boot 项目部署在同一台机器上,所以还需修改 Shipper 类型的 Logstash 的配置以支持两种类型的日志输入和输出,其配置文件的内容可 点击这里获取。

2023-10-09 15:27:02 502

原创 SSO单点登录和OAuth2.0区别

SSO是Single Sign On的缩写,OAuth是Open Authority的缩写,这两者都是使用令牌的方式来代替用户密码访问应用。流程上来说他们非常相似,但概念上又十分不同。SSO大家应该比较熟悉,它将登录认证和业务系统分离,使用独立的登录中心,实现了在登录中心登录后,所有相关的业务系统都能免登录访问资源。OAuth2.0原理可能比较陌生,但平时用的却很多,比如访问某网站想留言又不想注册时使用了微信授权。

2023-10-09 15:23:11 109

原创 45 个 Git 经典操作场景

如果你需要删除推了的提交(),你可以使用下面的方法。可是,这会不可逆的改变你的历史,也会搞乱那些已经从该仓库拉取(pulled)了的人的历史。简而言之,如果你不是很确定,千万不要这么做。这只能在没有推送之前有用. 如果你已经推了, 唯一安全能做的是, 那会创建一个新的提交(commit)用于撤消前一个提交的所有变化(changes);或者, 如果你推的这个分支是rebase-safe的 (例如:其它开发者不会从这个分支拉), 只需要使用。

2023-10-09 15:19:10 262

原创 网关 GateWay 的使用详解、路由、过滤器、跨域配置

有时候SpringCloudGateWay提供的过滤器工厂不能满足自己的要求。可能有时候需要在过滤时做一些其它的逻辑操作。那么这时候可以选择使用java代码自定义全局过滤器。@Component@Override// 1.获取请求参数//1.这里的request并不是servlet中的request//2.返回值是一个多键的map集合、也就是说这个map集合的键可以重复// 2.获取userName参数// 3.校验// 放行// 4.拦截// 4.1.禁止访问,设置状态码。

2023-09-19 10:25:51 1535

原创 WebSocket 的 6 种集成方式

实现一个库【Spring Cloud】一个配置注解实现 WebSocket 集群方案3种方式(Javax,WebMVC,WebFlux)在Spring Boot中的服务端和客户端配置。

2023-09-19 10:21:57 437

原创 注解实现接口幂等性

简单来说,就是对一个接口执行重复的多次请求,与一次请求所产生的结果是相同的,听起来非常容易理解,但要真正的在系统中要始终保持这个目标,是需要很严谨的设计的,在实际的生产环境下,我们应该保证任何接口都是幂等的,而如何正确的实现幂等,就是本文要讨论的内容。/*** 参数名,表示将从哪个参数中获取属性值。* 获取到的属性值将作为KEY。* @return*//*** 属性,表示将获取哪个属性的值。* @return*//*** 参数类型* @return*/

2023-09-19 10:17:57 105

原创 MyBatis-Plus 使用拦截器实现数据权限控制

例如我们名称简单的sql语句 直接在Service层用mybatisPluse自带的方法。

2023-09-19 10:14:01 594

原创 spring boot 使用AOP+自定义注解+反射实现操作日志记录修改前数据和修改后对比数据,并保存至日志表

*** 写入日志表时,字段对应的中文注释*/@Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到@Target({ElementType.FIELD,ElementType.METHOD})//定义注解的作用目标**作用范围字段、枚举的常量/方法@Documented //说明该注解将被包含在javadoc中/*** 汉字全称* @return*/

2023-09-08 15:25:05 2695 3

原创 13 秒批量插入 30 万条数据

13 秒批量插入 30 万条数据

2023-08-31 16:58:06 76

原创 Linux 命令 su 和 sudo 的区别

具体使用哪种方式切换用户看个人需求:如果不想因为切换到另一个用户导致自己在当前用户下的设置不可用,那么用。

2023-08-11 19:15:08 1761

原创 HashMap 二十一问

HashMap 二十一问

2023-08-11 19:13:13 188

原创 SpringBoot 该如何预防 XSS 攻击

*** Filter 过滤器,拦截请求转换为新的请求*//*** 初始化方法*/@Override/*** 过滤方法*/@Override} else {@Override/*注入自定义的序列化工具,将RequestBody的参数进行转译后传输*/// XSS序列化就是注意要分情况处理。拦截器处理一部分,并注意拦截器的注册方式Jackson的方式处理另一部分,也是注意配置方式。

2023-08-10 10:44:33 1141

原创 网关 GateWay 的使用详解、路由、过滤器、跨域配置

有时候SpringCloudGateWay提供的过滤器工厂不能满足自己的要求。可能有时候需要在过滤时做一些其它的逻辑操作。那么这时候可以选择使用java代码自定义全局过滤器。@Component@Override// 1.获取请求参数//1.这里的request并不是servlet中的request//2.返回值是一个多键的map集合、也就是说这个map集合的键可以重复// 2.获取userName参数// 3.校验// 放行// 4.拦截// 4.1.禁止访问,设置状态码。

2023-08-07 10:29:10 2269

原创 使用上 Spring 的事件机制

新增一个类,继承我们的ApplicationEvent。如下面代码,继承后定义了一个userId,有一个UserChangePasswordEvent方法。这里就定义我们监听器需要的业务参数,监听器需要那些参数,我们这里就定义那些参数。/*** @Description 修改密码事件**/@Getter@Setter。

2023-08-03 10:29:35 866

原创 SpringBoot + Docker 实现一次构建到处运行

Docker 作为一种新兴的虚拟化方式,它可以更高效的利用系统资源,不需要进行硬件虚拟以及运行完整操作系统等额外开销。传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。最重要的是一致的运行环境。Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性。从而达到真正意义上的 一次构建,到处执行。

2023-08-03 10:25:15 496

原创 Java 中的 7 种重试机制

从手动重试,到使用 Spring AOP 自己动手实现,再到站在巨人肩上使用特别优秀的开源实现 Spring Retry 和 Google guava-retrying,经过对各种重试实现方式的介绍,可以看到以上几种方式基本上已经满足大部分场景的需要:如果是基于 Spring 的项目,使用 Spring Retry 的注解方式已经可以解决大部分问题如果项目没有使用 Spring 相关框架,则适合使用 Google guava-retrying:自成体系,使用起来更加灵活强大。

2023-08-03 10:21:58 247

原创 京东开源的、高效的企业级表格可视化搭建解决方案:DripTable

drip-table:动态列表解决方案的核心库,其主要能力是支持符合 JSON Schema 标准的数据自动渲染列表内容。:一个可视化的用于 DripTable 配置 JSON Schema 标准的配置数据的生成工具。

2023-08-03 10:19:08 1785

原创 Redis 变慢了 解决方案

对 Redis 进行基准性能测试例如,我的机器配置比较低,当延迟为 2ms 时,我就认为 Redis 变慢了,但是如果你的硬件配置比较高,那么在你的运行环境下,可能延迟是 0.5ms 时就可以认为 Redis 变慢了。所以,你只有了解了你的 Redis 在生产环境服务器上的基准性能,才能进一步评估,当其延迟达到什么程度时,才认为 Redis 确实变慢了。为了避免业务服务器到 Redis 服务器之间的网络延迟,你需要直接在 Redis 服务器上测试实例的响应延迟情况。

2023-08-03 10:13:43 321

原创 权限框架jcasbin

基于springboot1.5.10,但是和springboot关系不太大,所以版本可以忽略,用你熟悉的springboot版本就行。同时又写了两个方法,用来添加和删除policy,Policy是自定的一个类,对官方使用的集合/数组进行了封装。jcasbin的权限控制非常简单,自定义一个过滤器,if判断就可以搞定,没错,就这么简单。是固定的文件,之间复制过来放在新建的和src同级的文件夹下即可。在这个类里,我们注入写好的配置类,然后转为静态的,在。,在容器加载的时候就初始化这个类,方便后续的使用。

2023-08-03 10:06:12 119

原创 SpringBoot 项目使用 Redis 对用户 IP 进行接口限流

SpringBoot 项目使用 Redis 对用户 IP 进行接口限流

2023-07-27 18:58:45 1315

原创 多租户的低代码平台,Saas开发平台:MateCloud

MateCloud是一款基于Spring Cloud Alibaba的微服务架构。目前已经整合Spring Boot 2.7.0、 Spring Cloud 2021、Spring Cloud Alibaba 2021、Spring Security Oauth2、Feign、Dubbo、JetCache、RocketMQ等,支持多租户的低代码平台,Saas平台开发套件。

2023-07-27 18:55:52 381

空空如也

空空如也

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

TA关注的人

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