Java高并发秒杀API之Service
本文主要是针对慕课网的Java高并发秒杀API之Service这门课程内容做一些整理,这是实现秒杀系统的第二门课程。
1、秒杀业务接口设计与实现
DAO编码之后的思考
- DAO层是数据访问层的简称
- DAO层工作演变成为:接口设计+SQL编写
- 代码和SQL的分离,方便Review
- DAO拼接等逻辑在Service层完成
秒杀service接口设计
- 在org.seckill下新建三个package
- service:存放service接口和实现类
- exception:存放service记录里面的异常,比如重复秒杀、秒杀已关闭
- dto:数据传输层,存放表示数据的类型,关注web和service之间的数据传递
- 在service包下创建SeckillService接口
- 在dto包下创建Exposer类,Alt+Insert生成构造方法constructor
- 在dto包下创建SeckillExecution类
- 在Exception异常包里添加重复秒杀异常、秒杀关闭以及秒杀相关业务,前两个方法可以继承第三个方法
秒杀service接口实现
- 在service下创建一个impl包,里边放SeckillServiceimpl类的实现
- 快捷键添加implement methods 方法
- 在org.seckill下新建enums枚举包,写SeckillStatEnum类
2、基于Spring托管Service实现类
基于Spring托管Service依赖理论
- Spring IOC(依赖注入)
- 对象工厂
- 依赖管理
- 一致的访问接口
- 为什么用IOC
- 对象创建统一托管
- 规范的生命周期管理
- 灵活的依赖注入
- 一致的获取对象
- 本项目IOC使用
- XML配置
- package-scan
- Annotation注解
使用Spring托管Service依赖配置
- 在spring下创建一个spring-service.xml文件
- 做seckill包的配置
- 在SeckillServiceImpl.java中注入Service和Autowird方法
3、配置并使用spring声明式事务
使用spring声明式事务理论
- 什么是声明性事务
- 开启事务
- 修改SQL-1
- 修改SQL-2
- 修改SQL-n
- 提交/回滚事务
- 声明性事务使用方式
- ProxyFactoryBean + XML(早期使用方式2.0)
- tx:advice+aop命名空间(一次性配置永久生效)
- 注解@Transactional(注解控制)(推荐使用)
- 事务方法嵌套
- 声明式事务独有的概念
- 传播行为(propagation_required)
- 什么时候回滚事务
- 抛出运行期异常(RuntimeException)
- 小心不当的try-catch
配置spring声明式事务
在spring下的spring-service.xml文件中进行配置
4、使用集成测试service逻辑
- 在SeckillService.java里快捷键创建test文件
- 在测试文件中进行集成测试
- resource下创建一个logback,xml文件
- 在https://logback.qos.ch/manual/configuration.html中寻找logback配置