【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

 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>
View Code

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();}
}
View Code

3. 在resources下创建数据库配置文件application.yml

server:port: 9001 #base微服务端口号
spring:application:name: tensquare-base #模块名字,必须写-datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://X.X.X.X:3306/tensquare_base?characterEncoding=utf-8
    username: Xpassword: Xjpa:database: mysqlshow-sql: true
View Code

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());}
}
View Code

转载于:https://www.cnblogs.com/oxygenG/p/10046778.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker 容器 和 虚拟机 的异同

见&#xff1a;https://www.docker.com/what-container 将软件打包成标准化的单元进行开发&#xff0c;发货和部署 容器映像是一个软件的轻量级独立可执行软件包&#xff0c;包含运行所需的所有内容&#xff1a;代码&#xff0c;运行时&#xff0c;系统工具&#xff0c;系统库&…

iTerm2 快捷键大全

转载地址https://cnbin.github.io/blog/2015/06/20/iterm2-kuai-jie-jian-da-quan/ 标签 新建标签&#xff1a;command t关闭标签&#xff1a;command w切换标签&#xff1a;command 数字 command 左右方向键切换全屏&#xff1a;command enter查找&#xff1a;command …

大型软件编程规范

“安全第一”的C语言编程规范 编者按&#xff1a;C语言是开发嵌入式应用的主要工具&#xff0c;然而C语言并非是专门为嵌入式系统设计&#xff0c;相当多的嵌入式系统较一般计算机系统对软件安全性有更苛刻的要求。1998年&#xff0c;MISRA指出&#xff0c;一些在C看来可以接受…

设计行业的新宠——云渲染

无论是对任职设计岗位的人员还是专业的设计公司来说&#xff0c;3D渲染&#xff0c;都是工作中极其重要的一步。在做过渲染后&#xff0c;设计的作品才能展现出它最接近真实世界的状态。 但是由于渲染实质上是对大量数据的处理&#xff0c;所以渲染这项工作对电脑硬件的要求非常…

[Xcode 实际操作]七、文件与数据-(17)解析JSON文档

目录&#xff1a;[Swift]Xcode实际操作 本文将演示如何解析JSON文档。 项目中已添加一份JSON文档&#xff1a;menu.json 1 {2 "menu":3 {4 "id": "file",5 "value": "File",6 "menuit…

Docker,容器,虚拟机和红烧肉

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Docker是什么&#xff1f;容器又是什么&#xff1f; Docker 直译&#xff1a;码头工人。是在码头上搬运货物的工人容器 英文&#xff1…

mac终端操作文件或文件夹(持续更新)

1、复制文件夹&#xff08;有文件&#xff09; cp -R 要复制的文件 要复制到哪个路径 2、复制文件 cp 要复制的文件 要复制到哪个路径 3、移动文件夹 mvdir 你要移动的文件夹 要移动到哪里

前端进阶系列(六):盒模型

盒模型是界面布局需要掌握的基本功。盒模型基本概念 盒模型四要素&#xff1a;margin、border、padding、content。 盒模型分为&#xff1a;标准盒模型&#xff08;W3C盒模型&#xff09; 、 怪异盒模型&#xff08;IE盒模型&#xff09; 盒模型区别 怪异盒模型总宽度 content…

holer实现外网访问内网数据库

外网访问本地数据库 本地安装了数据库&#xff0c;只能在局域网内访问&#xff0c;怎样从公网也能访问内网数据库&#xff1f; 本文将介绍使用holer实现的具体步骤。 1. 准备工作 1.1 安装并启动数据库 默认安装的数据库端口是3306。 2. 实现步骤 2.1 下载并解压holer软件包 Ho…

Docker 概念解析

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Docker的功能定位Docker为基于Linux容器的开源项目&#xff0c;其利用Linux内核中的各项功能——例如命名空间与控制组——以在操作系统之…

C语言 常用API

MySQL的C语言API接口 1、首先当然是连接数据库&#xff0c;函数原型如下&#xff1a; MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host,const char *user,const char *passwd,const char *db,unsigned int port,const char *unix_socket,unsigned long …

hadoop生态搭建(3节点)-10.spark配置

# https://www.scala-lang.org/download/2.12.4.html# 安装 scala tar -zxvf ~/scala-2.12.4.tgz -C /usr/local rm –r ~/scala-2.12.4.tgz # http://archive.apache.org/dist/spark/spark-2.3.0/ # 安装 spark tar -zxf ~/spark-2.3.0-bin-hadoop2.7.tgz -C /usr/local mv /u…

持续集成coding

1、安装docker yum -y install docker yum -y install composer yum -y install docker-compose 2、启动docker服务 service docker start 3、测试安装结果 docker-compose --version 4、创建目录 mkdir /data/continus-deploy 5、写入docker-compose.yml version: …

JSON字符串转换为Map

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 本文是利用阿里巴巴封装的FastJSON来转换json字符串的。例子如下&#xff1a; [java] view plain copy package com.zkn.newlearn.json;…

排序与查找 详细分析

C语言五种基本排序算法 程序员可以使用的基本排序算法有5种&#xff1a; 插入排序(insertionsort&#xff0e;)交换排序(exchangesOrt)选择排序(selectionsort)归并排序(mergesort)分布排序(distributionsort) 为了形象地解释每种排序算法是怎样工作的&#xff0c;让我们来看…

《Netkiller Spring Cloud 手札》Spring boot 2.0 mongoTemplate 操作范例

2019独角兽企业重金招聘Python工程师标准>>> 本文节选自 《Netkiller Spring Cloud 手札》 Netkiller Spring Cloud 手札 Spring Cloud Cookbook Mr. Neo Chan, 陈景峯(BG7NYT) 中国广东省深圳市望海路半岛城邦三期 518067 86 13113668890<netkillermsn.com> …

ZooKeeper原理及使用

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 ZooKeeper是Hadoop Ecosystem中非常重要的组件&#xff0c;它的主要功能是为分布式系统提供一致性协调(Coordination)服务&#xff0c;与…

自律只需要这篇文章

1. 钻研&#xff0c;只要你有一个方面特别优秀&#xff0c;则在这个社会就足够了,能够吃一辈子 2. 领悟&#xff0c;需要的时候&#xff0c;别人给你只是一个具体的方向&#xff0c;具体的路还是要自己去设计 3. 执行力&#xff0c;晚上喜欢想想没有小本本记录&#xff0c;那么…

数据和文件操作

怎样用C语言对某个目录下的文件名进行排序? 在4&#xff0e;8的例子中&#xff0c;用_dos_findfirst()和_dos_findnext()函数遍历目录结构&#xff0c;每找到一个文件名&#xff0c;就把它打印在屏幕上&#xff0c;因此&#xff0c;文件名是逐个被找到并列出来的。当你对某个目…