起因是公司一个同事接到需求,让把一条数据录入时createTime字段,设置为指定的字段,但是他走断点发现执行MyBatisPlus的insert之前值是对的,但是insert之后就改成当前时间了。开始我认为是数据库字段设置为了根据当前时间录入值,即默认为当前时间戳,但是一想不对,默认是指没有设置值,这里已经设置了为什么还是不对?后来发现,系统代码中设置了MetaObjectHandler处理,特殊处理了createTime这个字段。MetaObjectHandler:元数据对象处理器MetaObjectHandler接口是mybatisPlus为我们提供的的一个扩展接口,我们可以利用这个接口...阅读全文>>
首先,你要了解SpringBoot配置文件加载顺序,加载位置(代码内,Nacos等),当然这不是这里要说的,这里我们就是约定配置文件在resources下,一般有一个主配置文件application.yml,但是当配置过多时,一个配置文件,将会非常臃肿。所以我们需要把配置文件拆分,一些不需要动的,公用的,核心的配置放到application.yml下,其他的可以有多种拆分方式,例如可以分开发环境、测试环境、正式环境在bootstrap.yml增加配置标记当前环境spring: profiles: active:&nbs...阅读全文>>
首先我们要知道一个问题:HttpServletRequest的输入流只能读取一次,如果你在拦截器读取了Body的参数,那么在Controller再次读取时,会直接报错,原因如下:我们先来看看为什么HttpServletRequest的输入流只能读一次,当我们调用getInputStream()方法获取输入流时得到的是一个InputStream对象,而实际类型是ServletInputStream,它继承于InputStream。InputStream的read()方法内部有一个postion,标志当前流被读取到的位置,每读取一次,该标志就会移动一次,如果读到最后,read()会返回-1,表示已...阅读全文>>
RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。公钥加密--私钥解密,私钥加密--公钥解密示例代码import cn.hutool.core.codec.Base64; import lombok.AllArgsConstructor; import lombok.Data; import org.springframework.beans.factory.annotation.Value; import&nbs...阅读全文>>
在之前解释Spring事物不生效时,列举了很多方面的原则,详细参考Spring事物不生效的原因http://www.javacui.com/framework/560.html 其中说到了一点:在类内部调用调用类内部@Transactional标注的方法。这种情况下也会导致事务不开启。假如有如下实例类:@Service public class T1ServiceImpl extends ServiceImpl<T1EntityMapper, T1Entity> implements T1Servic...阅读全文>>
在分布式系统中,做事务跟踪,数据分片,都需要使用全局唯一ID。全局唯一ID的生成方式需要满足的需求一般包括:1.全局唯一:最基本的要求2.趋势递增:在MySQL的innoDB引擎中使用的是聚集索引,由于使用Btree的数据结构来存储索引数据,在主键的选择上面我们应该尽量使用有序的主键保证写入性能。3.单调递增 :保证下一个ID大于上一个ID,例如事务版本号、IM增量信息、排序等特殊需求4.信息安全: 如果ID是连续的,恶意用户的扒取工作就非常容易做了,直接按照顺序下载指定URL即可 所以在一些应用场景下,需要ID无规则 不规则,让竞争对手不好猜5.含时间戳:这样就能在开发中快速了解分布式id的...阅读全文>>
edis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。...阅读全文>>
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步...阅读全文>>
Base64能够将二进制转码成可见字符方便进行http传输,可是base64转码时会生成“+”,“/”,“=”这些被URL进行转码的特殊字符,致使两方面数据不一致。能够在发送前将“+”,“/”,“=”替换成URL不会转码的字符,接收到数据后,再将这些字符替换回去,再进行解码,将避免该问题。我们以hutool为例,以下是其Base64源码:package cn.hutool.core.codec; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IoUtil; import ...阅读全文>>
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。每次都要写点这东西我也烦透了,但是基本格式还是要遵守的,就加上吧。一个项目是基于SpringClo...阅读全文>>