zoukankan      html  css  js  c++  java
  • 【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.Driver
        url: jdbc:mysql://X.X.X.X:3306/tensquare_base?characterEncoding=utf-8
        username: X
        password: X
      jpa:
        database: mysql
        show-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
  • 相关阅读:
    element-ui 和ivew-ui的table导出export纯前端(可用)
    webstrom 2019 注册码(可用 2019年10月14日08:59:18)
    intellji IDEA 2019版激活码(亲测可用 2019年10月14日08:53:54)
    java开发相关工具安装包分享
    js有关字符串拼接问题
    js增删class的方法
    有关定位问题
    关于网页元素居中常见的两种方法
    有关css编写文字动态下划线
    js获取时间及转化
  • 原文地址:https://www.cnblogs.com/oxygenG/p/10046778.html
Copyright © 2011-2022 走看看