自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 事务方法中发送异步消息,且事务方法中和消息处理逻辑都更新同一表导致数据错乱

事务方法内更新了活动场次表,但是事务还没有结束,没有提交。此时消息已经发送出去,消费者查询到场次表活动开始时间未更新,判断为活动场次报名未开始。之后事务方法提交,再之后消费者提交更新把事务方法的更新覆盖掉了。业务场景:活动审核通过后,更新活动状态(更新为报名开始)、活动场次状态(更新为报名开始),然后发送延时异步消息(在活动报名开始、报名结束、活动开始、活动结束各个时间节点投递消息)。审核通过后,活动场次表的活动报名开始时间应该更新为审核通过时间,状态应该更新为报名中;事务提交之后再发送异步消息。

2023-03-14 20:02:19 275

原创 Doom流量回放工具导致的测试环境服务接口无响应的排查过程

doom工具具体导致线程阻塞的原因

2023-02-14 17:45:07 579

原创 单例模式枚举(Enum)结合ThreadLocal,存取线程共享信息

单例模式枚举(Enum)结合ThreadLocal,存取线程共享信息

2022-12-05 20:51:30 238

原创 Cache Aside Pattern(旁路缓存模式)在写数据的过程中,可以先删除 cache ,后更新 db 么?

不可以。以mysql 5.6为例,默认隔离级别为RR(可重复读)。线程1对数据进行更新,如果先删除缓存后更新DB,在两步中间若有线程2进行读数据操作,所读取的数据为更新前的数据,让后把此数据放入缓存。在此之后DB为新数据,缓存为旧数据,造成DB与缓存不一致

2022-09-07 15:14:48 362

原创 本机缓存和redis缓存不一致问题

业务场景:有一张排名表,记录某个活动的前名,每天凌晨24点更新一次数据,此外时间不更新。有两个查询:1:查询前二十名 ,由于此数据比较小,利用caffeineCache做本机缓存(一个小时自动过期)2.查询某个用户排名,由于条数比较多,利用redis做缓存(一个小时自动过期)情况一:当凌晨榜单更新后,一个小时内缓存未过期,总榜单数据在本机的caffeineCache缓存不会更新,如果有人前一个小时内没有查询过,没有他的缓存,此时他查询自己的排名和前20名,数据会不一致(前二十名为服务器的旧缓存数

2022-05-18 19:56:35 602

原创 mybatis-plus in查询某个字段在某个集合内,当集合超过1000size,查询报错。

思路:将集合分割成小于1000的若干个集合,然后利用or 关键字拼接,下面附工具类import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;import com.baomidou.mybatisplus.core.toolkit.support.SFunction;import org.apache.commons.lang3.ObjectUtils;import java.util.ArrayList;

2022-04-24 15:17:37 1750

原创 索引失效 java.io.EOFException: Unexpected EOF read on the socket

java.io.EOFException: Unexpected EOF read on the socketat org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:805)at org.apache.coyote.http11.Http11InputBuffer.access(300(Http11InputBuffer.java:42)at org.apache.coyote.http11.Http11Inp

2022-04-15 14:25:42 1134

原创 Arrays.asList得到的ArrayList 是Arrays的内部类

Arrays.asList得到的ArrayList 是Arrays的内部类,其add方法实现,直接抛异常

2022-04-02 09:18:43 190

原创 Datetime 和 Timestamp 之间抉择

Datetime 和 Timestamp 之间抉择Datetime 和 Timestamp 是 MySQL 提供的两种比较相似的保存时间的数据类型。他们两者究竟该如何选择呢?通常我们都会首选 Timestamp。下面说一下为什么这样做!DateTime 类型没有时区信息 DateTime 类型是没有时区信息的(时区无关) ,DateTime 类型保存的时间都是当前会话所设置的时区对应的时间。这样就会有什么问题呢?当你的时区更换之后,比如你的服务器更换地址或者更换客户端连接时区设置的话,就会导

2022-01-20 11:58:07 1402

原创 java使用float或者double 运算,精度丢失问题,IEEE754

public static void main(String[] args) { System.out.println(0.1+0.2); BigDecimal bigDecimal=new BigDecimal(0.1+""); BigDecimal bigDecimal2=new BigDecimal(0.2+""); BigDecimal add = bigDecimal.add(bigDecimal2); double doubleValue = add.do

2022-01-04 09:59:48 417

转载 为什么HashMap的长度是2的整数次幂?

先说答案:为了加快哈希计算以及减少哈希冲突为什么可以加快计算?我们都知道为了找到 KEY 的位置在哈希表的哪个槽里面,需要计算 hash(KEY) % 数组长度但是!% 计算比 & 慢很多所以用 & 代替 %,为了保证 & 的计算结果等于 % 的结果需要把 length 减 1也就是 hash(KEY) & (length - 1)这个 hash(KEY) 没什么可说的,调用 Object 里面的 native 方法完成计算,一般返回的是一个整数,至于是偶数还是

2021-12-01 17:32:48 148

转载 为什么 Java 中只有值传递?

public class Person { private String name; // 省略构造函数、Getter&Setter方法}public static void main(String[] args) { Person xiaoZhang = new Person("小张"); Person xiaoLi = new Person("小李"); swap(xiaoZhang, xiaoLi); System.out.println("

2021-12-01 10:28:10 133

原创 spring事务Transactional 中使用mysql truncate清空表对事务的影响

数据库版本为mysql8springboot 2.5.6。论坛里有别的博客说的truncate 后的sql无法提交的情况,在我使用的版本没有出现,可能他用的是比较老的版本。public class TestTeacherController extends BaseController { @Resource private JdbcTemplate jdbcTemplate; @ApiOperation("删除数据") @PostMapping("delete")

2021-11-26 15:40:06 1511 1

原创 java 基本数据类型int 的默认初始值问题

int类型在Java中,若果作为类成员声明,不初始化值,会被默认初始化为0;如果作为方法的局部变量来声明,不进行初始化的话 会在编译期报错,无法通过编译。

2021-11-24 14:19:43 8870 1

原创 前端传给后台的时间被自动加8小时,后端返给前端的时间自动减8个小时

原因 后端与数据库交互时,时间没有问题,问题在前端和后端之间时间数据传输时通过fastjson,转换,fastjson默认时区是中国上海时区-8小时,所以导致时区转换差了8小时,配置文件通过添加配置,告诉java,字符串时间为GMT+8,使时区一致。spring: jackson: time-zone: GMT+8...

2021-11-15 15:20:27 3941 1

原创 > 1248 - Every derived table must have its own alias mysql

1248 - Every derived table must have its own alias 报错一般是由于union后产生了虚拟表,但没有进行定义错误sql如下:SELECT * FROM ( ( SELECT gaform_lpt_30.file_id file_id, gaform_lpt_30.gettime gettime FROM `gaform_lpt_30` WHERE allagree = 1 ) UNION ALL.

2021-11-15 10:44:50 1061

原创 mybatis-plus mysql 自定义sql,union两张表实现提取公共字段并分页、排序

1.业务需求:业务为 个人重大事项报告 和 单位重大事项报告 两种。业务类似于:发起办公流程-》部门领导审核-》报备给单位领导。流程发起时,两种流程时分开发起的,所以设计时设计了两张表来记录两种业务。流程发起、审核、报备,设计的是完全独立的。后来由于甲方的脑残需求,要求在单位领导查看报备报备信息时,两张业务合并在一个列表里,并且要按时间排序,要有分页。2.解决思路:自定义sql,利用union 将两张业务表的公共字段 合并成一个虚拟表 ( SELECT gaform_lpt_30.fi

2021-11-15 10:39:38 7312 1

原创 mybatis 插入insert 如何返回自增主键

如果插入的入参是一个map,可以将自增的主键返回给map中的某个字段(key为id,value为空或者任意值),我的例子中是入参map中的id参数。主要是 useGeneratedKeys=“true” keyProperty=“id” 这两句配置 <insert id="saveInfoCmdDeptFeedback" parameterType="map" useGeneratedKeys="true" keyProperty="id"> INSERT INTO CF_

2021-09-23 14:32:08 369

原创 字符串不同初始化方式的差异

2021-09-18 16:33:10 81

原创 深拷贝实现的工具类利用输入输出流

package com.Utils;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;public class CloneUtils { @SuppressWarnings("unchecked")

2021-08-30 12:00:56 215

原创 关于Integer和int的比较 存储位置 jvm 自动拆装箱

1、由于Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永远是不相等的(因为new生成的是两个对象,其内存地址不同)。Integer i = new Integer(100);Integer j = new Integer(100);System.out.print(i == j); //false2、Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true(因为包装类Integer和基本数据类型int比较时,java会自动

2021-08-02 11:45:38 949

原创 自定参数解析器HandlerMethodArgumentResolver实现将用户token中的用户信息自动解析到controller中的方法的参数中

1.创建一个HandlerMethodArgumentResolver。package com.ciih.axj.resolver;import com.ciih.axj.model.UserPlus;import com.ciih.axj.model.User;import com.ciih.axj.myAnnotations.UserIn;import com.ciih.axj.service.UserPlusService;import com.ciih.axj.service.User

2021-07-23 17:32:36 300

原创 如果spring中 一个controller 或者 service 里需要非静态全局变量怎么办?

因为 默认controller service bean都是单例模式的,常规声明非静态成员变量,会引起线程不安全问题,可以将该变量:通过注解@Scope(“prototype”),将其设置为多例模式。

2021-06-30 09:23:46 570

原创 当post请求 url参数和body传参存在同名参数,controller如何处理

当post请求 url参数和body传参存在同名参数,controller如何处理?后台会将同名参数两个字符串加在一起

2021-06-23 20:56:25 1063 2

原创 java 上转型对象 编译时类型和运行时类型 多态

用父类声明对象并,用子类对象初始化,例如:Son s=new Son;Father f =s;子类对象赋值给父类对象,被称为上转型。此处对象f被称为对象s的上传型对象。此时对象f的编译时类型为Father 类,运行时类型为Son 类型。这是java多态特性的体现之一。如果子类重写的父类的方法,在编译期间,我们通过f调用Father 类中的方法,而在运行期通过f调用的Son类中的方法。常见的应用场景:我们在MVC架构中的controller注入了一个service,比如 :@Resourcepri

2021-06-23 20:09:36 114

原创 spring boot转发HttpServletRequest到其他服务器,做到用户无感知接口代理转发

需求:接口提供方,在我们系统内提交接口,我们生成虚拟接口路径。接口使用人调用我们系统内的虚拟接口我们转发给接口提供方,然后将接口提供方的response 返回给接口使用方。可以保护接口提供方的接口地址不会暴露。 public Object sendRequest(HttpServletRequest request, HttpServletResponse response) throws IOException { String jwtToken = request.getHea

2021-06-10 15:22:14 4490 1

转载 mybatisplus代码生成器

java文件 Generator.javapackage com.ciih.elqz;import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;import com.baomidou.mybatisplus.core.toolkit.StringPool;import com.baomidou.mybatisplus.core.toolkit.StringUtils;import com.baomidou.mybat

2021-05-27 11:50:25 162

原创 springboot 利用aop切面打印请求日志request response 打印controller 请求参数及返回值

配置切面类:package com.ciih.qbbs.aspect;import com.google.gson.Gson;import lombok.extern.slf4j.Slf4j;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.*;import org.springframework.context.an

2021-05-24 10:29:08 1477

原创 java中应当尽量循环嵌套查询,数据量比较大时查询时间会急剧增加

//java中应当尽量循环嵌套查询,数据量比较大时查询时间会急剧增加,像下面这种代码应当尽量避免public List<OrderRecord> getRecordList(User user, String orderId) { QueryWrapper<OrderRecord> orderRecordQueryWrapper=new QueryWrapper<>(); orderRecordQueryWrapper.lambda().

2021-04-29 13:13:10 611

转载 JAVA lambda表达式实现continue 跳出循环,lambda 中 continue outside of loop

使用 return​​​​​​​public class Test { public static void main(String[] args) throws FileNotFoundException { List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); list.fo

2021-04-28 10:38:17 9257

转载 MyBatis-Plus 批量插入

MyBatis-Plus 批量插入https://blog.csdn.net/leisure_life/article/details/98976565

2021-04-23 08:51:09 239

转载 spring事务管理中,使用Synchronized修饰事务方法,同步为什么会失效

spring事务管理中,使用Synchronized修饰事务方法,同步为什么会失效转载 https://blog.csdn.net/C_AJing/article/details/105992563

2021-04-13 13:52:47 411

原创 springboot2.4.4两个bean 相互依赖注入的问题

业务中遇到一种情况,有order 和order_report两张表,分别记录指令和指令下发记录。当插入指令时需要也插入一条指令下发记录;新增指令下发记录时,也要更新指令记录的当前处理人字段。于是orderService 中需要注入 orderRecordService,于是orderRecordService 中需要注入 orderService 。就导致了两个bean想互引用的情况。在springboot2.4.4版本,注解方式的相互引用不会导致启动报错,应当尽可能避免此种情况。spring的解决机制

2021-04-12 09:31:43 3765

原创 使用Mybatis-plus内置方法,更新一个字段还是全部字段,三种应对情况下性能效率比较

业务中遇到一种场景,需要从数据表中查询出一条记录,将其中一个字段更新一个值,以下三种方式://Mybatis-plus内置更新方法 @Override public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> { public boolean updateById(T entity) { return retBool(baseMapper.upd

2021-04-09 10:55:31 5439 1

原创 mybatis-plus lambda 写法 ,如何实现Mysql中的 find_in_set 功能,查询某个字符串是否包含在数据表中的某个字段里面

mybatis-plus lambda 写法 ,如何实现Mysql中的 find_in_set 功能,查询某个字符串是否包含在数据表中的某个字段里面?例如 查询的关键字为 id=123456,name=111,需要查询,是否包含在记录 id=123456,name={111,222,333,444,555} 这条记录里面。第一种方法:直接使用自定义查询语句,使用Mysql中的find_in_set 函数。第二种方法:利用mybatis-plus的lambda().apply 拼接SQL,代码如下 p

2021-04-08 16:28:36 5827

空空如也

空空如也

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

TA关注的人

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