复杂订单状态设计
表设计注意事项
下单后,数据库中的商品信息可能变更,因此不能用外键关联,需要用快照的方式
超卖问题及其解决
问题产生
高并发下修改共享资源
解决
1 加synchronized
- 效率低下
- 不支持集群和分布式
2 锁数据库
- 效率低,导致数据库性能低下
3 分布式锁
4 基于数据库的乐观锁机制
如何调用其他的rest接口
使用RestTemplate
- 配置
package com.xiong.config;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class WebMvcConfig {
@Bean
RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
return restTemplateBuilder.build();
}
}
- 使用
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("imoocUserId", "xxx");
headers.add("password", "xxxx");
HttpEntity<MerchantOrderVO> httpEntity = new HttpEntity<>(merchantOrderVO, headers);
ResponseEntity<JSONResult> responseEntity = restTemplate.postForEntity(paymentUrl, httpEntity, JSONResult.class);
JSONResult paymentResult = responseEntity.getBody();
如何做内网穿透
对支付时序图的理解
如何通过轮询方式更新订单状态
cron表达式的书写
springboot里边怎么写定时任务
- 入口类加@EnableScheduling以支持定时任务
- 写定时任务
package com.xiong.job;
import com.xiong.common.utils.DateUtil;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class OrderJob {
@Scheduled(cron = "0/1 * * * * ?")
public void autoCloseOrder() {
System.out.println("定时任务执行中:"+ DateUtil.getCurrentDateString(DateUtil.DATETIME_PATTERN));
}
}
使用定时任务关闭超期订单缺点及解决方案
缺点
- 存在时间差,程序不够严谨
- 不支持集群
- 导致同样的任务被多次执行
- 解决方案:只用一台机器运行定时任务
- 对数据库全表搜索,大大影响数据库的性能
解决方案
- 使用消息队列(延时队列)实现
- RabbitMQ,RocketMQ,Kafka,ZeroMQ
定时任务适用场景总结
- 只适用数据量小的情况
- 只是用实时性要求不高的情况
点击查看更多内容
1人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦