# mall **Repository Path**: rrreoru/mall ## Basic Information - **Project Name**: mall - **Description**: 项目demo - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-03-15 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README mall项目 一、<项目工程搭建> 技术要点:maven的聚合工程 总纲:在以后的项目环境中,搭建的项目都是聚合式的,即将总项目作为父项目,余下子项目就是该总体项目的子模块,子模块当中 也可以拥有子模块,因此是层层聚合的关系 1. 父项目的创建[mall] /** 打包方式为pom,先继承springboot的总体依赖 /** 项目所选的groupId为com.fd1833.mall.parent[为对项目的打包路径统一管理] /** 在规划出重要依赖的版本统一控制[mybatis-spring,mysql,springcloud等] /** 最后管理需要用到的依赖 2. eureka注册中心的创建[01-mall-registry] /** 继承于mall项目,项目groupId为com.fd1833.mall.common[注册中心属于公共组件] /** 导入eureka-server依赖 /** 编写配置文件[端口号,项目服务名称,注册中心地址,禁用自我注册,禁用服务列表,关闭自我保护,定时清理服务列表] /** 编写启动类[因为该项目也是独立的一个项目,需要独立运行的启动类],开启服务启用注解 3. zuul网关的创建[03-mall-gateway] /** 继承于mall项目,项目groupId为com.fd1833.mall.common[zuul网关也属于公共组件] /** 导入eureka-client依赖,这里也需要导入springboot依赖,貌似client端需要导入,server端不需要导入 /** 编写配置文件[端口号,项目服务名称,注册中心地址,服务id,zuul网关路由,心跳检测] /** 编写启动类[因为该项目也是独立的一个项目,需要独立运行的启动类],开启客户端启用注解,开启zuul代理注解 4. item微服务项目创建[02-mall-item] /** 这个item项目也是一个抽象化的概念,好比mall项目,其下的子项目,才是真正的服务项目[由api,service实现组成] /** 继承于mall项目,项目groupId为com.fd1833.mall.item /** 打包方式为pom 5. item-api项目的创建[mall-item-01-interface] /** 继承于item项目,项目groupId为com.fd1833.mall.item /** 该项目主要为item项目的实体类与接口[feignClient,service等接口]的存放项目,打包方式为jar包 /** 创建实体类包,工具类包,常量类包,接口包等公共包 6. item-service项目的创建[mall-item-02-service] /** 继承于item项目,项目groupId为com.fd1833.mall.item /** 该项目主要为item项目的微服务提供方,打包方式为war包 /** 既然是微服务,那么就需要用到feignClient,spring-web,eureka-client /** 导入上述依赖,因为版本号由最终的mall控制,因此上述依赖不需要版本号[item继承于mall,service继承于item] /** 编写配置文件[端口号,项目服务名称,服务id,注册中心,心跳检测,熔断相关] /** 编写启动类,开启feignClient启用注解,自动注入feiClient,因为feign由restTemplate与ribbon封装而成,因此不需要 引入这两个类的bean在启动类中,feign中也封装了hrystrix相关,因此熔断时只需要在配置文件中开启feign与hrystrix相关 配置,再在feign远程客户端接口上的@FeignClient上添加fallback属性,指定fallback服务降级方法实现类即可 二、<商品分类模块> 1. 根据商品分类表创建出各层,进行数据的流转 2. 跟以往不一样的是ResponseBody一块,在响应前端数据时,应是响应整个响应对象[状态码,响应体],而不是单单的响应体 3. 运用restful风格进行数据的初始流转,运用ResponseEntity类,传入枚举状态码实例和响应体,返回该对象到前台 4. 异常的处理 /** 在业务中,可能存在运行时异常,需要进行前置处理 /** 在商品分类模块,如果用户传入没有的分类编号,那么最终请求到数据库层时,将会发生查询不到,此时因抛出一个异常 /** 抛出的异常为自定义异常[模拟企业中统一编码规范],为了防止异常信息的不统一,创建异常枚举类型 /** 在自定义异常类中,声明异常枚举变量,并生成getter,setter /** 在自定义异常构造方法中,进行枚举变量赋值 /** 创建枚举类,在类中声明两个实例[枚举的实例与普通类的实例方式不同,这里可以理解为枚举类声明处实例后, 内部已经创建出了实例对象,用该对象的时候,只需要类名.的方式即可] /** 在枚举类中声明错误状态信息实例[参数 = code,msg],枚举类中的构造方法不需要访问修饰符,默认为private /** 声明了自定义异常,使用时应当被监听,就不在进行人为的异常处理,而是交给springMVC来处理 /** 此时声明一个自定义异常处理器,添加@,然后传入需要监听的异常类,他就会自动监听该异常类创建的对象所 抛出的异常,进而执行该异常处理器进行处理异常[AOP思想,运用通知方式处理异常] /** 处理异常的部分内容为获取到异常状态码与异常信息,将其封装到视图对象中,最终返回ResponseEntity所封装的 视图对象即可,此时页面展示的内容就应该是自定义异常信息的所有内容[状态码,文本信息,发生时间] 5. 特别注意【整体项目的包名结构最好前面三层或者两层为一致的,也就是其他模块的包名必须与服务启动类所在包名结构前缀 的二到三层一致】