【project】十次方-01
前言
项目介绍
系统分为3大部分:微服务、网站前台、网站管理后台;功能模块分为:问答、招聘、交友中心等
该项目融合了Docker容器化部署、第三方登陆、SpringBoot、SpringCloud、SpringData、RabbitMQ等,该项目采用完全的前后端分离,根据API文档开发
技术架构
后端架构:SpringBoot+SpringCloud+SpringData+StringMVC
前端架构:Node.js+Vue.js+ElementUI+NUXT
【注】:SpringBoot是Spring的纯注解版,SpringCloud是一个整合第三方技术的架构,采用SpringBoot方式(零配置文件)封装到Spring框架
SpringData是持久层的框架,用来替代Mybatis,更强大的是不仅支持关系型数据库,也支持非关系型数据库的增删改查
前后端分离

整体架构


SpringData JPA
系统设计与工程搭建
模块划分

RESTful
Restful一种软件架构风格,提供了一种设计原则和约束条件,基于http协议,适用于客户端和服务器端交互。目的是降低应用之间的耦合度,方便框架分布式处理程序
例如:用户请求的url使用同一个URL,用不同的请求方式get/post/delete/put等对请求的处理方法进行区分,在前后台分离开发中,不会对请求的资源地址产生混淆
SpringMVC对RESTtful提供了支持
1. 利用@RequestMapping 指定待处理请求的url模板和http请求的动作类型
2. 利用@PathVariable将url请求模板中的变量映射到处理方法参数上
3. 前台利用AJAX,在客户端发出put、delete动作的请求
一般请求格式如下:
@RequestMapping(value="/{id}",method=RequestMethod.GET)
@RequestMapping(value="/{id}",method=RequestMethod.POST)
@RequestMapping(value="/{id}",method=RequestMethod.DELETE)
@RequestMapping(value="/{id}",method=RequestMethod.PUT)
安全幂等性
安全:没有发生脏读、幻读、不可重复读等;幂等:在操作成功条件下,对数据没有产生不好的影响
1.GET:安全且幂等,向服务端发索取数据的请求,类似select操作
2.POST:不安全且不幂等,向服务器端发送数据,但是该请求会改变数据的种类等资源,类似insert操作
3.PUT:不安全但幂等,向服务器端发送数据,类似update操作
4.DELETE:不安全但幂等,删除某一个资源,类似delete操作
Docker创建MySQL服务
0. Linux上已经装过Docker和各种镜像
1. 在宿主机上启动docker,执行命令: systemctl start docker
2. 查看镜像,执行命令:docker images
3. 下载镜像,执行命令:docker search xxx ,然后执行 docker pull xxxx
4. 制作容器:docker run -di --name=tensquare_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=private centos/mysql-57-centos7
5. 查看正在运行的容器:docker ps -a
6. 关闭容器:docker stop CONTAINER ID
7. 开启容器:docker start CONTAINER ID
8. 删除容器:docker rm CONTAINER ID
9. 通过Navicat连接MySQL微服务
tensquare_common模块开发
1. 新建entity包,创建类Result,用于控制器类返回结果,这是由于前端需要接收JSON对象,可以通过@ResponseBody,直接将Bean转为JSON对象
2. 创建类PageResult ,用于返回分页结果
3. 返回码定义类StatusCode
4. 分布式ID生成器,由于数据库要分片部署(MyCat),所以不能使用数据库本身的自增功能来产生主键值,只能由程序来生成唯一的主键值,util包下的IdWorker.java
tensquare_base模块开发
1. pom.xml文件引入依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>tensquare_parent</artifactId>
<groupId>com.tensquare</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>tensquare_base</artifactId> <dependencies>
<!--SpringBoot整合JPA-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency> <!--依赖的common模块-->
<dependency>
<groupId>com.tensquare</groupId>
<artifactId>tensquare_common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency> <!--数据库链接-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies> </project>
2.创建启动类
package com.tensquare.base; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import util.IdWorker; /**
* @author Oxygen
* @create 2018-11-30 - 18:49
*/
@SpringBootApplication
public class BaseApp {
public static void main(String[] args) {
SpringApplication.run(BaseApp.class);
} @Bean //只有当某个类用到时,通过@Bean注入到容器
public IdWorker idWorker() {
return new IdWorker();
}
}
3. 在resources下创建数据库配置文件application.yml
server:
port: 9001 #base微服务端口号
spring:
application:
name: tensquare-base #模块名字,必须写-
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://X.X.X.X:3306/tensquare_base?characterEncoding=utf-8
username: X
password: X
jpa:
database: mysql
show-sql: true
4. CURD
5. 公共异常处理
package com.tensquare.base.controller; import entity.Result;
import entity.StatusCode;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice; /**
* 统一异常处理
*
* @author Oxygen
* @create 2018-12-01 - 19:26
*/
@RestControllerAdvice
//如果全部异常处理返回json,那么可以使用 @RestControllerAdvice 代替 @ControllerAdvice ,
// 这样在方法上就可以不需要添加 @ResponseBody。
public class BaseExcepitonHandler { @ExceptionHandler(value = Exception.class)
public Result exception(Exception e) {
e.printStackTrace();
return new Result(false, StatusCode.ERROR, e.getMessage());
}
}
【project】十次方-01的更多相关文章
- [LeetCode] Super Pow 超级次方
Your task is to calculate ab mod 1337 where a is a positive integer and b is an extremely large posi ...
- HAWQ取代传统数仓实践(十二)——维度表技术之分段维度
一.分段维度简介 在客户维度中,最具有分析价值的属性就是各种分类,这些属性的变化范围比较大.对某个个体客户来说,可能的分类属性包括:性别.年龄.民族.职业.收入和状态,例如,新客户.活跃客户.不活跃客 ...
- CV code references
转:http://www.sigvc.org/bbs/thread-72-1-1.html 一.特征提取Feature Extraction: SIFT [1] [Demo program][SI ...
- JS函数大全 莫名其妙找到的
1 .document.write(""); 输出语句 2 .JS中的注释为// 3 .传统的HTML文档顺序是:document->html->(head,body) ...
- CV codes代码分类整理合集 《转》
from:http://www.sigvc.org/bbs/thread-72-1-1.html 一.特征提取Feature Extraction: SIFT [1] [Demo program] ...
- JavaScript技巧手冊
js小技巧 每一项都是js中的小技巧,但十分的有用! 1.document.write(""); 输出语句 2.JS中的凝视为// 3.传统的HTML文档顺序是:documen ...
- Java 18套JAVA企业级大型项目实战分布式架构高并发高可用微服务电商项目实战架构
Java 开发环境:idea https://www.jianshu.com/p/7a824fea1ce7 从无到有构建大型电商微服务架构三个阶段SpringBoot+SpringCloud+Solr ...
- 字节(byte)、二进制、字节流、字符流相关概念分析
https://blog.csdn.net/changwilling/article/details/52065955 1.字节: 字(Byte)节是长度单位.位(bit)也是长度单位. 因为计算机通 ...
- es6基本介绍及使用
1.什么是es6 ECMAScript 6.0(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了.它的目标,是使得JavaScript语言可以用来编写复杂的大型应 ...
随机推荐
- property_get / property_set (转载)
转自:http://blog.csdn.net/xujianqun/article/details/6363318 每个属性都有一个名称和值,他们都是字符串格式.属性被大量使用在Android系统中, ...
- 水题不AC,自挂二叉树——Chemist
学长让我们刷USACO的水题果然是有道理的,做了四道挂了两道...细节处理一定要小心!大概都是NOIP Day1 T1的难度,但是一定要考虑全面否则还是凉凉啊. 一.USACO1.1贪婪的送礼者 题目 ...
- Poj 1743 Musical Theme (后缀数组+二分)
题目链接: Poj 1743 Musical Theme 题目描述: 给出一串数字(数字区间在[1,88]),要在这串数字中找出一个主题,满足: 1:主题长度大于等于5. 2:主题在文本串中重复出现 ...
- Ubuntu install and uinstall
一.Ubuntu中软件安装方法 1.APT方式 (1)普通安装:apt-get install softname1 softname2 -; (2)修复安装:apt-get -f install so ...
- Sign on Fence CodeForces - 484E
http://codeforces.com/problemset/problem/484/E 题意: 给定一个长度为n的数列,有m次询问,询问形如l r k 要你在区间[l,r]内选一个长度为k的区间 ...
- 题解报告:hdu1202The calculation of GPA(算绩点问题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1202 Problem Description 每学期的期末,大家都会忙于计算自己的平均成绩,这个成绩对 ...
- 题解报告:hdu 2087 剪花布条(KMP入门)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面 ...
- java课程设计全程实录——第3天
参考资料: 课设主要指导: http://www.cnblogs.com/zhrb/p/6872265.html 2019年5月10日 https://blog.csdn.net/weixin_421 ...
- 浅析套接字中SO_REUSEPORT和SO_REUSEADDR的区别
Socket的基本背景 在讨论这两个选项的区别时,我们需要知道的是BSD实现是所有socket实现的起源.基本上其他所有的系统某种程度上都参考了BSD socket实现(或者至少是其接口),然后开始了 ...
- P1478 陶陶摘苹果(升级版)
题目描述 又是一年秋季时,陶陶家的苹果树结了n个果子.陶陶又跑去摘苹果,这次她有一个a公分的椅子.当他手够不着时,他会站到椅子上再试试. 这次与NOIp2005普及组第一题不同的是:陶陶之前搬凳子,力 ...
