java 高并发下 不要在经常被调用的地方new 实体类对象,使用单例模式创建对象。
UserBuryingPoint userBuryingPoint = new UserBuryingPoint ();
UserBuryingPointDay userBuryingPointDay = new UserBuryingPointDay ();
UserBuryingPointMonth userBuryingPointMonth = new UserBuryingPointMonth();
BeanUtils.copyProperties(userBuryingPointVo,userBuryingPoint);
//判断是否是新用户 并且赋值
UserBuryingPoint userBuryingPointIfNewUser = this.judgeNewUsers(userBuryingPoint);
//更新埋点用户观看视频的状态,点赞,举报等
this.updateUserVideosCount(userBuryingPointIfNewUser);
//保存埋点
userBuryingPointJpaRepository.save(userBuryingPoint);
//2019年10月30日15:39:28 将数据加入新表 月份
BeanUtils.copyProperties(userBuryingPoint, userBuryingPointMonth);
userBuryingPointMonthJpaRepository.save(userBuryingPointMonth);
//2019年10月30日15:41:19 将数据加入新表 日期
BeanUtils.copyProperties(userBuryingPoint, userBuryingPointDay);
userBuryingPointDayJpaRepository.save(userBuryingPointDay);
return ResultMap.success();
最初第一版本,用户埋点,每天在100W+的接口调用数据量。导致oom异常。
项目炸掉。
之后创建单例模式进行对实体类的使用;
@Data
@ApiModel("xxx")
@Entity(name="xxxx")
public class UserBuryingPoint extends BaseUserBuryingPoint {
static class LazyHolder {
private static final UserBuryingPoint INSTANCE = new UserBuryingPoint();
}
UserBuryingPoint (){}
public static final UserBuryingPoint getInstance() {
return UserBuryingPoint.LazyHolder.INSTANCE;
}
}
实现接口不需要一直new 对象的存在。直接调用。