自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(229)
  • 资源 (2)
  • 收藏
  • 关注

原创 Mybatis-Plus 之【动态表名】

MybatisPlus【动态表名(这里介绍按天分表)】前言一、方案一(动态传参)使用方法(Mapper自定义SQL)二、方案二(DynamicTableNameInnerInterceptor插件)使用方法(插件配置+ThreadLocal+辅助类)三、方案三(DynamicTableNameInnerInterceptor插件、省略辅助类)使用方法(插件配置+ThreadLocal)总结注意在某些情况下,需要将大量数据分散到多个数据表中,这样可以提高数据库的查询效率和数据处理能力。

2024-02-24 20:34:15 1115

原创 接口请求重试的8种方法

接口请求重试机制是保证系统稳定性和容错能力的重要手段之一。当接口请求发生失败或暂时性错误时,通过重试机制可以提高请求的成功率。本文将详细介绍接口请求重试机制的几种常见方法。// 可在此处自定义重试逻辑});Spring Retry 为接口请求重试提供了完善和易用的解决方案,可以灵活控制各种重试参数,适用于复杂系统的容错要求。使用自定义的重试工具类来实现接口请求的重试机制,提高代码的复用性和可维护性。提供重试方法,参数包括请求函数、重试策略等在重试方法内部执行循环请求。

2024-02-21 23:07:08 448

原创 Springboot多种方法处理静态资源:设置并访问静态资源目录

综上所述,就是Springboot的静态资源目录添加方法啦。是不是和Nginx很像?虽然现在Nginx和对象存储都很方便,但是直接用Springboot进行静态资源的划分,也不为一种方法。

2024-02-03 09:09:47 1597

原创 springBoot静态资源文件夹以及文件夹之间的优先级

浏览器访问localhost:8080/a.html将访问static中的a.html。比如当static文件夹中和public文件夹中都存在a.html。

2024-02-03 08:52:53 449

原创 springboot项目以jar包运行时,读取jar包内的静态文件

【代码】springboot项目以jar包运行时,读取jar包内的静态文件。

2024-02-03 08:45:14 564

原创 一次因线程池使用不当造成生产事故OOM

我们从看到unable to create new native thread开始,查看了监控,发现线程数量飙升。接着分析了线程堆栈日志,了解到线程池中的核心线程全部处于的状态。然后我们做了一个简单的小实验,通过JVisualVM工具观测到局部变量的线程池中的核心线程并没有被回收。于是推断出发生了线程泄露的情况,最后通过源码探究的方式,寻找到了解决方案,设置allowCoreThreadTimeOut或执行shutdown。

2024-01-08 22:32:30 911

原创 SpringBoot中@PostConstruct注解作用

是Java自带的注解,在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法。从Java EE5规范开始,[Servlet]中增加了两个影响Servlet生命周期的注解,@PostConstruct和@PreDestroy,这两个注解被用来修饰一个非静态的void()方法。总结:类初始化调用顺序:(1)构造方法Constructor。

2023-12-24 17:36:05 439

原创 Springboot整合Jedis实现单机版或哨兵版可切换配置

前文写到借助redis实现Shiro实现session限制登录数量踢人下线,本文就写一下Jedis的配置,可切换单机版和集群哨兵版,方便开发测试。只需修改redis.sentinel.enable配置值就可以切换项目连接池。

2023-11-11 10:07:55 454

原创 手机号验证码登录

3.注册or登录,不同的场景,阿里云短信发送,文案不同;且注册时,判断用户是否已经注册,查看用户表是否存在,根据手机号码查询,且存下的手机号码也是。6.缓存验证码,过期时间为60s(过期后验证码输入依然可用),后续验证正确性时,先取缓存,再根据手机号查询表。5.落地,发送记录落表,后续验证正确性,状态包含未使用 已使用,输入正确及标记为已使用。需要手机号,获取验证码除了登录,还可能是注册的场景,不同的类型需要加以区分。1.验证码正确性,先取缓存验证码,再根据手机号查询验证码记录表。1.手机号验证码登录。

2023-11-11 09:49:49 277

原创 BlockingQueue实现简易消息队列处理器 可分区顺序消费

好了,收,大概就是这样子,主要应用场景为:需要轻量级的顺序队列消费 应用场景。

2023-11-05 15:00:51 239

原创 将Bean注入Spring容器的五种方式

将bean放入Spring容器中有哪些方式?我们知道平时在开发中使用Spring的时候,都是将对象交由Spring去管理,那么将一个对象加入到Spring容器中,有哪些方式呢,下面我就来总结一下。

2023-11-04 22:29:59 331

原创 Spring Boot spring.factories的原理

即 Spring Boot starter将各个组件分别统一封装一个固定配置类中,如 redis 相关依赖类统一封装到 RedisAutoConfiguration 类中,数据库依赖类统一封装到 DataSourceAutoConfiguration 类等,然后将这些统一配置类配置到 spring.factories 文件中,Spring Boot在启动的时候(前提配置。Spring Boot 启动时先读取 spring.factories 的类列表,然后再一个个实例化,并放到 Spring 上下文中。

2023-11-04 22:23:28 426

原创 SpringBoot的Condition注解

又一次温习了SpringBoot是提供了快速开发Spring项目的作用而不是增强功能。本次写了好几个Demo,跟着视频教程,使用注解去实现Bean的注入,以及起步依赖之类的,最主要的还是第一次查看了SpringBoot启动类的注解,了解到里面自动配置的一些机制,第一次了解到可以将类作为参数传给一个注解。本次内容比较多,目前笔者没有完全吸收,不过笔者觉得这一次的学习能有助于SpringBoot的使用,至少在将来写项目的时候,可以配置好依赖。

2023-11-04 21:16:34 211

原创 elasticsearch索引按日期拆分

例如原索引为sc_all_system_log,现按天拆分索引sc_all_system_log20220902,sc_all_system_log20220903,sc_all_system_log20220904,并且定期清理五天前索引。这里我们指定的索引名称sc_all_system_log20220903,无此索引时会自动创建索引,创建索引时发现是以sc_all_system_log为前缀会默认使用上面的模板创建。搜索时,我们只需要指向别名(sc_all_system_log)搜索即可,如下图。

2023-11-04 09:08:45 613

原创 对接第三方接口鉴权

实际上,攻防之间没有绝对的安全,我们能做的是尽量提高攻击者的成本。相对方案二,方案三的方法相对已经有很大提升了(同样参数不能无限制调用),但是仔细一想,还是有问题,攻击者截获请求以后,还是可以在一定时间窗口内通过重放攻击的方式发送请求。但是,对于对外的接口,我们就不得不重视这个问题,外部接口没有做鉴权的操作就直接发布到互联网无疑是。,发现我们已经实现了鉴权的效果,但是每个接口前面都有一大堆鉴权的逻辑,这代码太那啥了。是一样的,未授权系统截获后还是可以通过重放的方式,伪装成认证系统,调用这个接口。

2023-10-30 20:27:10 717

原创 @RequestMapping 注解使用技巧

GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping 都是HTTP方法特有的快捷方式@RequestMapping的变体,分别对应具体的HTTP请求方式的映射注解。使用 params 元素,你可以让多个处理方法处理到同一个URL 的请求, 而这些请求的参数是不一样的。如上述代码所示,到 /user/login 的请求会由 login() 方法来处理,而到 /user/register的请求会由 register() 来处理。

2023-09-23 15:00:37 326

原创 数据库保存之Java字符串的压缩与解压缩

当字符串太长,需要将字符串值存入数据库时,如果字段长度不够,则会出现插入失败;或者需要进行Http传输时,由于参数长度过长造成http传输失败等。

2023-09-12 08:29:24 1567 1

原创 java8 实现递归查询

【代码】java8 实现递归查询。

2023-09-09 13:56:00 774

原创 Maven的profiles多环境配置

一个项目通常都会有多个不同的运行环境,例如开发环境,测试环境、生产环境等。而不同环境的构建过程很可能是不同的,例如数据源配置、插件、以及依赖的版本等。每次将项目部署到不同的环境时,都需要修改相应的配置,这样重复的工作,不仅浪费劳动力,还容易出错。为了解决这一问题,Maven 引入了 Profile 的概念,通过它可以为不同的环境定制不同的构建过程。

2023-08-30 21:03:31 3522

原创 Java接口中的default(默认方法)

如果新增的这个方法写成普通方法的话,那么需要在该接口所有的实现类中都重写这个方法。如果新增的方法定义为default类型,就不需要在所有的实现类中全部重写该default方法,哪个实现类需要新增该方法,就在哪个实现类中进行实现。如果一个实现类实现了多个接口,并且这些接口中有两个接口的默认方法是一样的,那么就必须在实现类中重写默认方法。如果一个实现类只实现了一个接口,那么可以不用重写接口中的默认方法。默认方法可以通过接口的实现对象直接调用,也可以被接口的实现类重写。

2023-08-29 12:29:35 829

原创 Mybatis查询in的字段过多不走索引

这个时候可以考虑将in的数量变少, 200以内都可以, 在数据库方面采用 foreach unionall 的方式将数据集合查询出来。

2023-08-20 09:58:38 826

原创 Mybatis通过on duplicate key update实现批量插入或更新

(3) 相较于replace into(insert加强版,不存在时insert,存在时先delete后insert)虽然也能达到批量更新目的,但因为删除和添加需要重复维护索引,所以大批量比on duplicate key update性能要差,小量可忽略,自选为。函数用法说明:如果 expr1 是 TRUE (expr1 <> 0 and expr1 <> NULL) ,则 IF() 的返回值为 expr2;在update后面要判断参数是否为空,如果不为空进行更新,为空的就不进行更新了。

2023-08-20 09:36:06 792

原创 【定时任务处理中的分页问题】

上面所说的一些场景,是我所遇到过的一些“坑”。在真正的业务场景中,可能还会有更多更复杂的分页问题。一般来说,具体问题还是需要具体看待,不能照搬照抄,但是可以借鉴参考。以不变应万变。控制数据总量不变,这样才能准确分页。考虑异常场景。防止异常场景下,程序不断重试,阻塞后续正常任务执行。添加监控。线上问题层出不穷,做好监控可以及时发现并处理。

2023-08-17 20:29:12 259

原创 mapper hepper manager 三种类的区别

Mapper 关注数据库和对象之间的映射,Helper 提供通用的辅助功能,而 Manager 则负责管理和协调对象或资源。在ORM(对象关系映射)框架中,Mapper 负责处理对象的加载和保存,将对象与数据库的交互逻辑抽象出来,使得业务代码可以专注于处理业务逻辑。Manager 可以对特定类型的对象进行创建、获取、更新、删除等操作,也可以管理对象之间的关系或执行一些特定的业务逻辑。"Mapper", "Helper", 和 "Manager" 是三种在编程中常见的类名,它们各自表示了不同的功能和职责。

2023-08-16 12:26:17 133

原创 RSA和AES加密

防止直接看到明文:在存储密码时,很多网站使用MD5对用户密码进行加密,这样即使不法分子得到数据库的用户密码的MD5值,也无法知道用户的密码。当用户登录时,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。例如,在云存储系统中,通常使用AES算法对用户的数据进行加密,以保护用户的数据安全。需要注意的是,随着技术的进步,MD5的安全性已经逐渐降低,对于需要高安全性的应用场景,推荐使用更安全的哈希算法,如SHA-256等。

2023-08-16 11:31:01 296

原创 【ElasticSearch入门】

ElasticSearch:智能搜索,分布式的搜索引擎是ELK的一个组成,是一个产品,而且是非常完善的产品,ELK代表的是:E就是ElasticSearch,L就是Logstach,K就是kibanaE:搜索和分析的功能L:Logstach搜集数据的功能,类似于flume(使用方法几乎跟flume一模一样),是日志收集系统K:Kibana数据可视化(分析),可以用图表的方式来去展示,文不如表,表不如图,是数据可视化平台。

2023-08-11 21:39:13 977 1

原创 Helper类和Utils类的

Utils类通常用于实现通用功能或算法,它们是无状态的,只包含静态方法,使用时无需创建类的实例。Utils类可以用于多个模块或应用程序,例如,在JavaScript中,开发人员可能会创建一个名为"StringUtils.js"的实用工具文件,其中包含了字符串处理相关的实用函数。Helper类通常用于特定任务或场景,例如,在Web开发中,开发人员可能会创建一个名为"FormHelper.js"的文件,其中包含有关表单验证、输入格式化等的辅助函数。Helper类和Utils类的主要区别在于其功能和使用方式。

2023-08-11 06:39:37 421

原创 java常见的几种阻塞队列

我们来看一下Java中常见的几种的阻塞队列的相关知识。Java中阻塞队列的典型例子就是BlockingQueue的实现类,常用的有ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue、DelayQueue、PriorityBlockingQueue五种,它们各自有不同的特点,比如内存结构、排序方式等区别。

2023-08-05 12:06:09 239

原创 java重试机制实现方案

上面介绍了几种常见重试机制的实现方法以及两种成熟的重试组件,除了定时任务重试,其余的方案他们都存在一个共同的问题,就是当服务器宕机或者其他情况导致方法没有进行重试。在一些一定要进行重试补偿的场景中,上述方案无法保证方法一定进行重试,可以将重试数据持久化,通过定时任务+重试组合解决这个问题。

2023-07-29 22:53:39 1667

原创 MySQL中IN的取值范围较大时会导致索引失效

其实,意思就是虽然使用了索引,但该索引列的值并不唯一,有重复。这样即使使用索引快速查找到了第一条数据,仍然不能停止,要进行目标值附近的小范围扫描。但它的好处是它并不需要扫全表,因为索引是有序的,即便有重复值,也是在一个非常小的范围内扫描。一般来说,得保证查询至少达到range级别,最好能达到ref,type出现index和all时,表示走的是全表扫描没有走索引,效率低下,这时需要对sql进行调优。:有范围的索引扫描,相对于index的全表扫描,他有范围限制,因此要优于index。:sql所用到的索引。

2023-07-29 22:09:02 1020

原创 Mysql定时删除表数据

由于用户环境有张日志表每天程序都在狂插数据,导致不到一个月时间,这张日志表就高达200多万条记录,但是日志刷新较快,里面很多日志没什么作用,就写了个定时器,定期删除这张表的数据。最后把上面的语句在数据库执行一遍,大功告成,可以删除Sync_Time在497小时之前的数据了。如果不想用该定时器了的话,可以直接在数据库事件中将状态更改为ENable即可。使用navicat连接的数据库->事件->找到对应的事件修改。如果想要调整定时器执行时间间隔,可以直接在事件中修改。然后创建我们想要的定时器及删除存储过程。

2023-07-29 22:05:43 582

原创 Spring Boot使用Redis阻塞队列实现异步秒杀下单

中没有这条记录,则将userId和优惠卷存入到redis中,并且返回0,整个过程需要保证是原子性的,我们可以。当以上逻辑走完后,我们可以根据返回的结果来判断是否是0,如果是0,则可以下单,,如果不充足,则直接结束,如果充足,继续在redis中判断用户是否可以下单,,然后返回,前端可以通过返回的订单id来判断是否下单成功。在以上6个步骤中,我们可以采用怎样的方式来优化呢?文章知识点与官方知识档案匹配,可进一步学习相关知识。整体思路:当用户下单之后,测试成功,查看Redis。当用户发起请求,此时。

2023-07-23 13:08:19 258

原创 Springboot使用数据库做配置中心

这里我们只讲jdbc的,其余的请自行研究。----------------------------------------服务端 config server------------------------------------------------------------------------------正文开始---------------------------------------------------------------------------------------扩展。

2023-07-23 12:52:43 530

原创 延时队列任务

该方案是利用JDK自带的DelayQueue来实现,这是一个无界阻塞队列,该队列只有在延迟期满的时候才能从中获取元素,放入DelayQueue中的对象,是必须实现Delayed接口的。1.定时任务:该方案通常是在小型项目中使用,即通过一个线程定时的去扫描数据库,通过订单时间来判断是否有超时的订单,然后进行update或delete等操作(quartz来实现。take():获取并移除队列的超时元素,如果没有则wait当前线程,直到有元素满足超时条件,返回结果。注意:使用 @Autowired进行使用。

2023-07-14 10:36:33 96

原创 产品流程图

流程图设计 1.什么是流程图2.流程图元素定义3.几种常见的产品流程图3.1业务流程图 | 泳道图(给产品经理看)3.2任务流程图(给程序员看)3.3页面流程图(给UI设计人员看) 4.如何绘制流程图4.1调查研究4.2梳理提

2023-07-14 09:54:24 678

原创 阿里云RockMQ与SpringBoot的整合

开源版本Rocket和商业版本的。

2023-07-12 23:31:35 1483

原创 接口设计的总结

作为后端开发,不管是什么语言,Java、Go 还是 C++,其背后的后端思想都是类似的。我们做后端开发工程师,主要工作就是:如何把一个接口设计好。所以,今天就给大家介绍,设计好接口的 36 个锦囊。

2023-07-09 00:05:36 345

原创 接口性能优化技巧

接口性能优化

2023-07-09 00:02:51 686

原创 深度详解Nginx正向代理与反向代理

它的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我,从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。C真实房东(服务端)只知道房子租给了B房产中介(代理),并不知道A租房人(客户端)租了自己的房子。代理翻墙去访问(用户知道要访问真正的服务器)

2023-06-22 21:33:33 803

原创 开发详细设计需要思考的常见问题

2023-06-21 17:16:54 93

cpd源码交付.xmind

cpd源码交付.xmind

2023-11-16

java开发规范.pdf

本pdf 以 Java 开发者为中心视角,分为编程规约、异常日志、单元测 试、安全规约、MySQL 数据库、工程结构、设计规约

2020-12-16

redis客户端

redis客户端,适合64位系统

2017-08-09

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

TA关注的人

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