【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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM