1 系统设计
一.系统架构
- 前后端分离的系统架构,后端架构为:
SpringBoot+SpringCloud+SpringMVC+SpringData 我们把这种架构也称之为全家桶。
二.模块划分
- 十次方工程共分为18个子模块(其中17个是微服务)
- 本章内容是搭建父工程、公共子模块tensquare_common和基础微服务tensquare_base。
三.表结构分析
- 我们这里采用的分库分表设计,每个业务模块为1个独立的数据库。
- tensquare_article 文章
tensquare_base 基础
tensquare_friend 交友
tensquare_gathering 活动
tensquare_qa 问答
tensquare_recruit 招聘
tensquare_user 用户
tensquare_spit 吐槽
四.API文档
- 课程提供了前后端开发接口文档(采用Swagger语言进行编写),并与Ngin进行了整合。双击Nginx执行文件启动后,在地址栏输入http://localhost:801 即可访问API文档
前后端约定的返回码列表:
五.理解RESTful
- 7个HTTP方法:GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS
- 接口规范
我们在项目中用到了GET/POST/PUT/DELETE四种方法
2 项目前期准备
一.开发环境要求
- JDK1.8
数据库mysql 5.7
开发工具 idea 2017.1.2
maven版本3.3.9
docker 最新版本
centos7
VMware Workstation Pro 12
二.MYSQL建库建表(容器)
- 我们的mysql使用的是docker环境的.
- 下载镜像
- 创建容器
- SQLyog连接MYSQL ,并执行建表SQL
三.测试工具Postman
四.IDEA配置
3 十次方工程搭建
一.搭建父工程
- 选择菜单file-new project ,弹出窗口中左侧菜单选择Maven ,点击next按钮
- 删除src文件夹
- 修改pom.xml 添加以下配置
二.搭建公共子模块
- 右键点击工程,弹出菜单选择 New -Module 弹出窗口选择Maven ,点击next按钮
- 创建返回结果实体类
- 新建entity包,包下创建类Result,用于控制器类返回结果
get,set,无参构造,有参构造 - 创建类PageResult ,用于返回分页结果
- 返回码定义类
- 分布式ID生成器
由于我们的数据库在生产环境中要分片部署(MyCat),所以我们不能使用数据库本身的自增功能来产生主键值,只能由程序来生成唯一的主键值。我们采用的是开源的twitter( 非官方中文惯称:推特.是国外的一个网站,是一个社交网络及微博客服务) 的snowflake (雪花)算法。
tensquare_common工程创建util包,将IdWorker.java直接拷贝到tensquare_common工程的util包中。
- 新建entity包,包下创建类Result,用于控制器类返回结果
4 基础微服务-标签CRUD
一.模块搭建
- 搭建基础微服务模块tensquare_base , pom.xml引入依赖
- 创建启动类
- 在resources下创建application.yml
二.标签管理-CRUD
- 表结构分析
表名称:tb_label - CRUD的实现
- 实体类
创建com.tensquare.base包,包下创建pojo包 ,包下创建实体类Label - 创建数据访问接口
com.tensquare.base包下创建dao包,包下创建LabelDao接口
JpaRepository提供了基本的增删改查
JpaSpecificationExecutor用于做复杂的条件查询 - 业务逻辑类
com.tensquare.base包下创建service包,包下创建LabelService类。 在这个类中,我们实现基本的增删改查功能 - 控制器类
com.tensquare.user包下创建controller包,创建UserController
- 实体类
三.功能测试
- 测试查询全部数据
使用浏览器测试GET方法 http://localhost:9001/label - 测试根据ID查询标签
使用浏览器测试GET方法 http://localhost:9001/label/1 - 测试增加:
使用postMan工具来进行测试POST PUT DELETE等方法。 - 测试修改,删除功能
四.公共异常处理
- 为了使我们的代码更容易维护,我们创建一个类集中处理异常
在om.tensquare.user.controller包下创建公共异常处理类BaseExceptionHandler
五.跨域处理
- 跨域是什么?浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域 。我们是采用前后端分离开发的,也是前后端分离部署的,必然会存在跨域问题。 怎么解决跨域?很简单,只需要在controller类上添加注解@CrossOrigin 即可!这个注解其实是CORS的实现。
- CORS(Cross-Origin Resource Sharing, 跨源资源共享)是W3C出的一个标准,其思想是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功,还是应该失败。因此,要想实现CORS进行跨域,需要服务器进行一些设置,同时前端也需要做一些配置和分析。