@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次操作,一次写低位,一次写高位,因此当写到一半刚好上下文切换时可能有风险
国际化
使用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对象的其他线程则可能覆盖掉这个值
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。