06 | 牛刀小试:如何搭建优惠券计算服务和用户服务?
搭建 coupon-calculation-serv
- 深入了解
- 翻译
- 解释
- 总结
本文是一篇关于搭建优惠券平台项目的实战经验分享,重点介绍了如何使用Spring Boot搭建优惠券平台的子模块,并详细讲解了优惠券计算逻辑的实现过程。作者通过具体的代码示例和技术原理讲解,帮助读者了解如何使用Spring Boot搭建应用,并加深对设计模式和数据冗余的理解。文章还提到了分层设计的思想,以及使用spring-data-jpa和spring-web搭建数据层和Controller层的过程。此外,文章还提出了思考题,引发读者对集群环境中应用互相发起调用的思考。总的来说,本文适合想要深入了解优惠券平台项目搭建的开发人员阅读,具有很高的参考价值。
《Spring Cloud 微服务项目实战》,新⼈⾸单¥59
全部留言(30)
- 最新
- 精选
- gallifrey置顶@Override protected Long calculateNewPrice(Long totalAmount, Long shopAmount, Long quota) { // 计算使用优惠券之后的价格 Long newPrice = convertToDecimal(shopAmount * (quota.doubleValue()/100)); log.debug("original price={}, new price={}", totalAmount, newPrice); return newPrice; } 作者看一下这个DiscountTemplate类的实现逻辑有问题,newPrice只是该商户的折扣完的价格,总价是totalAmount - shopAmount + newPrice ; 不知理解是否正确
作者回复: 还真是,我这数学就是体育老师都教不出来!想当年做营销中心的时候就搞出了个全店5折的bug。同学你算数一定是正经老师教的,思路清晰理解到位。 话说极客的评论置顶功能怎么玩,编辑大大,帮我把这条置顶。要让童鞋们看看,小学数学基础对以后写代码的指导意义有多大。一个程序员的一生,就是和bug抗争的一生,没有搞过几个P0 bug就像没挂过科一样,这个人生是不完整的。 我作为程序员的人生特别的完整。看了这个评论的同学们,你想自己家孩子也搞几个P0被3.25年终奖泡汤吗?不你不想,那就从我做起,赶紧的给娃的私教奥数补习班报起来
2021-12-27614 - Geek_a6bab1老师您好,请教一个问题。我现在有一个比较久的springboot项目,需要升级到cloud项目,每个服务对应了一个数据库。现在碰到的问题是,把用户表拆出来以后,再别的服务就不能通过join去关联用户信息了。对于该问题一般在分布式项目中是怎么处理的?
作者回复: 在业务里将join用户表的操作替换成通过后台api调用,获取用户服务信息。不过用户是基础数据,查询量比较巨大,实践里最好做一层数据异构,比如上一些主搜服务挡在DB前面。我打一个比方,就像做商品中心,如果商品表以前都是join获取商品数据,现在微服务化之后就把商品数据异构到了opensearch(根据自己公司技术栈选择主搜中间件选型),然后让业务方接入open search,对时效性要求很高的服务才通过对外暴露api做表查询
2021-12-28210 - Layne回答下思考题: 1.利用注册中心的方式; 2.利用API网关的方式; 3.利用类似nginx这种做VIP的负载均衡方式。
作者回复: 非常不错,使用nginx、keepalive做vip是挺常用的方案,省钱又简单
2021-12-2410 - peter请教两个问题:问题1:jpa本身不是具体的ORM框架,而是对ORM框架的一个封装,对吗?问题2:jpa只能用hibernate吗?能用mybatis吗?
作者回复: orm可以理解为一个“理念”或者“口号”,在关系型DB和对象之间构建一层映射。jpa是一种“ORM规范”,它没有实现ORM,只是定义了一组持久化API的规范,我在项目中用的spring官方推荐的spring-data-jpa(底层hibernate实现)才是jpa规范的具体实现,像openjpa、toplink这些都是jpa的实现。mybatis你可以理解为半自动或者手动挡的ORM框架,它本身并不是jpa的实现,你可以了解一下mybatis-plus,比mybatis好用一些。
2021-12-246 - 找工作姚老师在讲主线的时候穿插了很多干货,以前看了很多次设计模式,但是就连最简单的工厂模式是啥都没记住。姚老师一句:工厂方法会将子类转为顶层接口返回。直接道出了核心!
作者回复: 设计模式最大的用处,就是在面试环节哇咔咔! 要是评选最滥竽充数的设计模式,我推选facade
2022-03-1125 - 杨逸林老师怎么不用 Spring MVC 自带的记录请求体打印的内容来打印 @RequestBody 修饰的内容呢?这样一个个写 log.info JSON.toJSONString不累吗。 ```java @Bean public CommonsRequestLoggingFilter logFilter() { CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter(); filter.setIncludeQueryString(true); filter.setIncludePayload(true); filter.setMaxPayloadLength(10000); filter.setIncludeHeaders(false); filter.setAfterMessagePrefix("REQUEST DATA : "); return filter; } ``` application.yml ```yml logging: level: org: springframework: web: filter: # 打开请求体的日志 CommonsRequestLoggingFilter: debug ``` 或者在 logback 里面配置也是一样的。 这样就能看到请求体里面的内容了,它最终会转成 CacheXXWrapper,从已缓存的内容里面读。
作者回复: 后面我们会转成使用openfeign来发起远程调用,feign组件有一个同样的功能课程里会讲到
2022-01-064 - 大明猩看了老师写的代码,感觉自己这几年白学了,写不出来这么好的代码啊!
作者回复: 这个托是专业的!
2022-01-143 - martin老师,请教一个问题,AbstractRuleTemplate 已经实现了 RuleTemplate 接口,为什么 MoneyOffTemplate 还要重复写 implements RuleTemplate 呢? public abstract class AbstractRuleTemplate implements RuleTemplate {} public class MoneyOffTemplate extends AbstractRuleTemplate implements RuleTemplate {}
作者回复: 啊哈,我抄作业的时候顺带拿过来了,同学很细心,这段可以去掉
2021-12-3033 - 6点无痛早起学习的和尚有一个问题,目前已经 1 年半的 Java 业务开发经验,看源码的时候,需要跟着动手写吗?还是看源码梳理业务逻辑不用跟着动手写。 如果要跟着动手写,那是不是主要写业务逻辑处理部分,实体类这些就没有必要去重复写了,直接 cv?
作者回复: 一年半已经是中忍级别了,实体类啥的就直接copy过来吧,么的问题的
2021-12-2823 - kimoti修炼外功就是写业务逻辑代码,修炼内功就是算法,计算机底层原理,操作系统……
作者回复: 每到面试的时候,内功心法都会大幅提升
2021-12-243