@Resource @Lazy 不兼容

需要使用@Autowired + @Lazy

SpringBoot 部署静态资源

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

resource目录下新建 static文件夹
将静态资源放入 static文件夹

通过 域名/文件名 进行访问

resource/static/1.txt
resource/static/test/2.txt

则通过以下地址访问

www.xxx.com/1.txt
www.xxx.com/test/2.txt

计算运行时对象占用内存

lucene提供的用于计算堆内存占用大小工具类:RamUsageEstimator

<dependency>
  <groupId>org.apache.lucene</groupId>
  <artifactId>lucene-core</artifactId>
  <version>4.0.0</version>
</dependency>

//计算指定对象及其引用树上的所有对象的综合大小,单位字节
long RamUsageEstimator.sizeOf(Object obj)

//计算指定对象本身在堆空间的大小,单位字节
long RamUsageEstimator.shallowSizeOf(Object obj)

//计算指定对象及其引用树上的所有对象的综合大小,返回可读的结果,如:2KB
String RamUsageEstimator.humanSizeOf(Object obj)

Swagger 测试接口添加 Header

@ApiImplicitParams(value = {@ApiImplicitParam(paramType = "header", name = "access-token", required = true)

32bit机 操作long型无法保证原子性

long型占8字节,共64位,其写操作在32位机上会分为2次操作,一次写低位,一次写高位,因此当写到一半刚好上下文切换时可能有风险
image.png

国际化

使用i18n时需要注意编辑器打开properties的格式与properties读取的格式配置是否相同,否则可能出现乱码

分布式主键 数据延时问题

用户注册采用全局id生成器(rpc接口),此时生成userId后就会写入会员主数据,并异步执行注册后续流程
在异步流程中,可能存在主数据还未写入完成的情况,导致用户查询&校验失败
调整流程,可以等待写库返回再启动异步操作,或者异步随机等待一段时间,尝试重新查询用户数据

@Builder 设置初始值会失效

需要在对应属性上使用@Builder.Default才可以

DateFormat 全局默认时区 & 单独指定时区

当前系统设置了全局默认时区,且不可修改
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
此时需要针对某个时间做特定的时区格式化时
可以单独设置SimpleDateFormat的时区来格式化

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
format.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
format.format(new Date());

此时则会输出北京时区的时间

mybatisplus 自增列配置

// 一定要设置type = IdType.AUTO 否则无法实现自增效果 且id的值会快速膨胀
@TableId(type = IdType.AUTO)

SimpleDateFormat 线程不安全

format方法的源码中,会将传入的date,set到SimpleDateFormat中的成员变量的Calendar中,若此时出现并发,使用同一个SimpleDateFormat对象的其他线程则可能覆盖掉这个值


老污的猫
30 声望5 粉丝