
java
java
BinaryBoss
一些日常总结,有用拿走,无用划走!
展开
-
mongotemplate 对Bigdecimal汇总相加
注意status要放在project里面,否则succCount、failCount、unknownCount会为0。原创 2024-08-06 18:21:05 · 307 阅读 · 0 评论 -
Springboot整合Nacos配置中心 多环境配置
Nacos多环境的配置转载 2022-11-21 16:22:13 · 2526 阅读 · 2 评论 -
mongodb 聚合Aggregation分组group汇总索引问题
mongo很多知识点在网上搜到的都是比较基础,很多都是告诉你Aggregation聚合基本用法,一些复杂一点的用法,还是得自己去看官方文档比较靠谱,之前遇到的几个MongoDB问题,都是通过查看官方文档解决的,官方文档也比较详细。原创 2022-11-09 22:03:21 · 2549 阅读 · 0 评论 -
springboot AOP记录操作日志(包含遇到的问题)
项目上需要对一些重要的接口记录操作日志,便于历史问题追踪、排查。主要记录的字段有操作人、请求ip、操作时间、模块、功能、请求参数、请求结果等。原创 2022-11-01 21:52:35 · 1571 阅读 · 0 评论 -
RocketMQ的消息优先级
有些场景,需要应用程序处理几种类型的消息,不同消息的优先级不同。RocketMQ是个先入先出的队列,不支持消息级别或者Topic级别的优先级。业务中简单的优先级需求,可以通过间接的方式解决,下面列举三种优先级相关需求的具体处理方法。......转载 2022-07-15 17:09:40 · 2037 阅读 · 0 评论 -
记一次MQ并发消费导致任务状态异常问题
项目中有一个短信群发任务(例如1次要发送1W条短信),系统会获取任务中每一条短信的MQ并发发送短信。任务默认状态是未发送(状态码:0),需要在这一批任务发送第一条短信的时候,将任务状态修改为发送中(状态码:1),在任务发送结束将状态修改为发送完成(状态码:2)。伪代码如下,通过redis记录当前任务已发送了多少条,如果是第一条,则将任务状态更新为发送中,如果已发送条数等于任务总条数,将状态更新为发送完成代码这么写,简单测试了两个任务,发现没有问题实际线上运行的时候,发现部分任务始终是发送中状态,错误日原创 2022-06-12 09:28:57 · 572 阅读 · 0 评论 -
java json字符串转map 字段顺序错乱问题
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.73</version></dependency>默认可以使用JSON.parseObject将字符串转成Map,但是如果json中有多个key-value,则转换后的顺序可能颠倒。如下 p.原创 2022-05-18 17:38:53 · 2393 阅读 · 2 评论 -
java提取文本中的url(没有http或https也能提取)
java 提取文本中的url原创 2022-04-18 16:09:55 · 2730 阅读 · 5 评论 -
mongodb大批量删除数据的方案对比
业务背景系统中有个mongodb集合每天增长上千万,时间长了,系统中这个集合已经有几亿数据了,需要写一个定时任务,把集合中三个月前的数据删除,并且后面每天凌晨执行这个定时任务.方案分析方案一使用Mongo的游标MongoCursor,遍历获取集合id获取id列表idList,然后根据idList批量删除方案二使用mongoTemplate.find,每次查询1万条数据,遍历获取集合id获取id列表idList,然后根据idList批量删除代码片段方案一 /**原创 2021-09-10 17:57:49 · 4328 阅读 · 0 评论 -
Redis+Lua限制发送量及遇到的坑
业务中需要限制每个账号每天发送短信数量,如果没有超过设置的发送量,则正常发送,否则返回失败。解决思路:将账号ID+yyyyMMdd组成redis的key,value为当天的发送量。 在发送前获取账号ID+yyyyMMdd的值,如果没有超过发送量,则账号ID+yyyyMMdd对应的值+1,发送短信,如果账号ID+yyyyMMdd对应的值大于发送量,则返回失败。 设置账号ID+yyyyMMdd的过期时间为1天。 考虑并发问题,“查询账号ID+yyyyMMdd的值”和“账号ID+yyyyMMdd对应原创 2021-08-25 17:39:40 · 599 阅读 · 0 评论 -
Springboot快捷导入/导出excel
目前见过最方便的导入/导出excel的方法,直接上代码。pom引用: <dependency> <groupId>com.pig4cloud.excel</groupId> <artifactId>excel-spring-boot-starter</artifactId> <version>0.4.1</version> ..原创 2021-08-12 18:11:31 · 788 阅读 · 0 评论 -
java 手机号运营商号段正则匹配(长期更新)
import com.cq.mysmscommon.enums.SpTypeEn;import java.util.regex.Pattern;public class MobileOperator { /** * 中国移动号码正则 * 139、138、137、136、135、134、147、150、151、152、157、158、159、178、182、183、184、187、188、198、195、172 * 虚拟运营商号段: 1703、1705、170.原创 2021-08-12 17:56:59 · 693 阅读 · 0 评论 -
java文本敏感词、关键字搜索检测
背景在做一些跟内容相关的项目的时候,经常需要对内容文本中的内容进行检测,检测文本中是否包含某个敏感、违法等词汇,例如“贷款”、“发票”之类的。有些狡猾的用户可能知道“贷款”在你的系统中是敏感词,不能审核通过,便使用“贷 款”、“贷$款”、"贷;款"等这种方式故意欺骗你的系统,让你的系统无法简单找出这些敏感词。解决方案解决方案一:使用List的contains方法检测文本中是否有敏感词这个是最容易想到的,将所有敏感词存放在List中,每次需要检测文本中是否有敏感词的时候,for循环list列表原创 2021-03-30 20:07:31 · 9104 阅读 · 0 评论 -
springboot mongodb 批量(bulkOps)插入或更新(upsert)数据
参与的项目中有一个业务场景,有两个消费者从kafka中拉取数据消费:1、订单消费者:从订单队列中拉取订单数据,插入到mongodb,集合名称为order(主要包含id、orderNo、orderName、status)2、订单状态消费者:从订单状态队列中拉取数据,更新order集合中的状态字段(status)存在问题:1、订单状态消费者消费依赖于订单消费者,如果订单消费者消费速度慢了,订单还没有插入到mongodb中,订单状态根据订单号orderNo去更新数据,则会找不到订单数据...原创 2021-02-25 17:00:19 · 14977 阅读 · 1 评论 -
springboot基于caffeine多级缓存设计
目前参与的项目中有一个对外接口,客户通过apikey请求接口,项目中需要判断apikey是否存在我们系统中,为提升apikey判断速度,决定用caffeine将apikey->User缓存在本地。大致校验流程如下:具体代码如下:CacheConfig.java定义userCache和errorApikeyCache两个缓存,其中userCache用来存apikey->User数据,errorApikeyCache用来存无效的apikey(设置一定过期时间),防止客户用相同无原创 2021-02-24 11:22:37 · 449 阅读 · 0 评论 -
Java 动态创建枚举
定义动态枚举创建工具类package com.cq.xxx.util;import sun.reflect.ConstructorAccessor;import sun.reflect.FieldAccessor;import sun.reflect.ReflectionFactory;import java.lang.reflect.AccessibleObject;import java.lang.reflect.Array;import java.lang.reflect.Fie原创 2021-02-24 10:46:24 · 1465 阅读 · 2 评论 -
JAVA 性能调优相关命令
线上故障主要会包括cpu、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top 三连,然后依次jstack、jmap伺候,具体问题具体分析即可。CPU一般来讲我们首先会排查cpu方面的问题。cpu异常往往还是比较好定位的。原因包括业务...转载 2020-03-22 21:06:19 · 472 阅读 · 1 评论