• 【探花交友】前后端分离、开发工具、环境搭建


    文章目录

    2、前后端分离

    2.1、前后端分离的概述

    2.2、YAPI介绍

    3、开发工具

    3.1、虚拟机配置

    3.2、Android模拟器

    3.3、调试工具PostMan

    4、环境搭建

    4.1、MYSQL数据库

    4.2、基础服务组件

    4.3、IDEA配置

    4.4、Maven模块分析

    4.5、模块依赖

    4.6、搭建环境

    4.7、Lombok

    2、前后端分离

    2.1、前后端分离的概述

    项目基于前后端分离的架构进行开发,前后端分离架构总体上包括前端和服务端,通常是多人协作开发

    • 前后端分离开发基于HTTP+JSON交互

    • 通过接口文档(API文档)定义规范

    • 前后端按照文档定义请求及响应数据

     

    2.2、YAPI介绍

    YAPI已经在linux虚拟机中准备好了

    请求地址:http://192.168.136.160:3000/

    用户名/密码:tanhua@itcast.cn/123456

    对于接口的定义我们采用YApi进行管理,YApi是一个开源的接口定义、管理、提供mock数据的管理平台。

     

    接口定义:

     

    mock数据,YApi提供了mock功能,就是模拟服务端返回测试数据:

     

    还可以运行http请求(需要在Chrome中安装支持跨域扩展 chrome 安装 yapi 扩展教程 - 掘金):

     

     

    3、开发工具

    探花交友项目的开发统一使用提供的Centos7环境,该环境中部署安装了项目所需要的各种服务,如:RabbitMQ,MongoDB、Redis等。

    • 虚拟机的root用户密码为:root123

    • 默认参数:CPU:2核,内存:4G,硬盘:60G

    • IP地址建议设置为192.168.136.160,否则有些服务将不可用,比如:Redis、RocketMQ等。

    3.1、虚拟机配置

    由于课程中使用了较多的软件,且之间会有联系,推荐同学IP地址设置为192.168.136.160

     

    仅仅需要修改虚拟机中的子网IP即可。

    3.2、Android模拟器

    客户端由前端团队进行开发,前端提供apk进行对接,所以,需要我们安装安卓的模拟器进行测试。

    目前对开发者有很多专业的模拟器如genymotion,但是这些模拟器功能强大,空间占用率高并不适用于教学,甚至在某些环境下不能正常的启动。所以可以选择国内的安卓模拟器产品,比如:网易、夜神等,在这里我们推荐使用网易模拟器,其兼容性好、功能完善而且还简洁,但是它不支持虚拟机中安装。

    下载:MuMu模拟器官网_安卓模拟器_网易手游模拟器

     

    3.3、调试工具PostMan

    Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。postman被500万开发者和超100,000家公司用于每月访问1.3亿个API。

    官方网址:Postman

    解压资料文件夹中的软件,安装即可

     

    4、环境搭建

    4.1、MYSQL数据库

    数据库设计规范:详见资料文件夹下《探花交友-mysq表.md》文件

    数据库表说明
    tb_user用户表
    tb_user_info用户详情表
    tb_settings用户设置表
    tb_question好友问题表
    tb_black_list黑名单
    tb_announcement公告表

    将资料中数据库表导入到MYSQL中

    4.1.1、导入数据库

    (1) 打开Navicat ,点击右键选择新建数据库,名字跟我们要导入的数据库的名字一样,字符集一般选utf-8

     

    (2) 在新建的数据库上右击,选择“运行SQL文件”,在提示框中选择文件所在的路径,编码保持一致选择utf-8

     

    (3) 提示Successfully 导入成功后,可能在左侧看不到导入的数据库,关闭Navicat,重新打开即可看到

    4.2、基础服务组件

    探花交友学习中,除MySQL数据库部署到本地电脑中。其他涉及到的所有组件都已经以docker形式安装到虚拟机中。我们只需要进入虚拟机,使用简单的命令即可。为了方便学习与减少基础服务占用的学习时间,全部使用docker-compose的方式集中式部署。这些文件在linux虚拟机中的/root/docker-file文件夹下

     

    每个文件夹中都包含一个docker-compose.yml配置文件,一键启动并部署应用。

    1. #进入组件目录
    2. cd /root/docker-file/base/
    3. #执行docker-compose命令
    4. docker-compose up -d

    base

    • 其中包含redis,nacos,yapi,mongo

    fastdfs

    • 包含fastdfs操作需要的组件

    rmq

    • 包含RabbitMQ需要所有组件

    recommend

    • 包含推荐系统需要所有组件

    4.3、IDEA配置

    项目依赖环境(需提前安装好)

    • JDK1.8

    • Intellij Idea

    • maven-3.x以上

    • Git

    • UTF-8编码格式

    设置项目编码格式

     

    设置Maven仓库

    设置本地仓库,建议使用资料中提供好的仓库

     

    4.4、Maven模块分析

    整体项目使用Maven架构搭建,采用聚合工程形式管理模块,为了便于调用,dubbo需要拆分为接口模块和服务模块

     

    工程主体结构

    父工程工程名称说明
    tanhuatanhua-autoconfig自动装配的工具类
    tanhuatanhua-domain实体类模块
    tanhuatanhua-dubboDubbo子模块(可以理解为文件夹,管理dubbo模块)
    tanhuatanhua-app与手机端交互的入口模块
    tanhua-dubbotanhua-dubbo-interfaceDubbo接口模块
    tanhua-dubbotanhua-dubbo-dbDubbo服务模块(数据库部分)
    tanhua-dubbotanhua-dubbo-mongoDubbo服务模块(MongoDB部分)

    模块依赖分析

     

    4.5、模块依赖

    tanhua

    1. <properties>
    2.    <maven.compiler.source>8maven.compiler.source>
    3.    <maven.compiler.target>8maven.compiler.target>
    4.    <mysql.version>5.1.47mysql.version>
    5.    <jackson.version>2.11.0jackson.version>
    6.    <druid.version>1.0.9druid.version>
    7.    <servlet-api.version>2.5servlet-api.version>
    8.    <jsp-api.version>2.0jsp-api.version>
    9.    <joda-time.version>2.5joda-time.version>
    10.    <commons-lang3.version>3.3.2commons-lang3.version>
    11.    <commons-io.version>1.3.2commons-io.version>
    12.    <mybatis.version>3.5.6mybatis.version>
    13.    <mybatis.mybatis-plus>3.4.1mybatis.mybatis-plus>
    14.    <lombok.version>1.18.8lombok.version>
    15.    <mongo.version>4.0.5mongo.version>
    16.    <spring-cloud.version>Hoxton.SR10spring-cloud.version>
    17.    <spring-cloud-alibaba.version>2.2.5.RELEASEspring-cloud-alibaba.version>
    18. properties>
    19. <dependencies>
    20.    <dependency>
    21.        <groupId>org.springframework.bootgroupId>
    22.        <artifactId>spring-boot-starter-testartifactId>
    23.        <scope>testscope>
    24.    dependency>
    25.    <dependency>
    26.        <groupId>junitgroupId>
    27.        <artifactId>junitartifactId>
    28.        <version>4.12version>
    29.        <scope>testscope>
    30.    dependency>
    31.    <dependency>
    32.        <groupId>org.projectlombokgroupId>
    33.        <artifactId>lombokartifactId>
    34.    dependency>
    35.    <dependency>
    36.        <groupId>cn.hutoolgroupId>
    37.        <artifactId>hutool-allartifactId>
    38.        <version>5.4.3version>
    39.    dependency>
    40.    <dependency>
    41.        <groupId>com.alibabagroupId>
    42.        <artifactId>fastjsonartifactId>
    43.        <version>1.2.8version>
    44.    dependency>
    45. dependencies>
    46. <dependencyManagement>
    47.    <dependencies>
    48.        <dependency>
    49.            <groupId>io.nettygroupId>
    50.            <artifactId>netty-bomartifactId>
    51.            <version>4.1.59.Finalversion>
    52.            <type>pomtype>
    53.            <scope>importscope>
    54.        dependency>
    55.        <dependency>
    56.            <groupId>io.projectreactorgroupId>
    57.            <artifactId>reactor-bomartifactId>
    58.            <version>2020.0.4version>
    59.            <type>pomtype>
    60.            <scope>importscope>
    61.        dependency>
    62.        <dependency>
    63.            <groupId>io.projectreactor.nettygroupId>
    64.            <artifactId>reactor-nettyartifactId>
    65.            <version>0.9.8.RELEASEversion>
    66.        dependency>
    67.        <dependency>
    68.            <groupId>org.springframework.cloudgroupId>
    69.            <artifactId>spring-cloud-dependenciesartifactId>
    70.            <version>${spring-cloud.version}version>
    71.            <type>pomtype>
    72.            <scope>importscope>
    73.        dependency>
    74.        <dependency>
    75.            <groupId>com.alibaba.cloudgroupId>
    76.            <artifactId>spring-cloud-alibaba-dependenciesartifactId>
    77.            <version>${spring-cloud-alibaba.version}version>
    78.            <type>pomtype>
    79.            <scope>importscope>
    80.        dependency>
    81.        <dependency>
    82.            <groupId>joda-timegroupId>
    83.            <artifactId>joda-timeartifactId>
    84.            <version>${joda-time.version}version>
    85.        dependency>
    86.        
    87.        <dependency>
    88.            <groupId>com.baomidougroupId>
    89.            <artifactId>mybatis-plusartifactId>
    90.            <version>${mybatis.mybatis-plus}version>
    91.        dependency>
    92.        
    93.        <dependency>
    94.            <groupId>mysqlgroupId>
    95.            <artifactId>mysql-connector-javaartifactId>
    96.            <version>${mysql.version}version>
    97.        dependency>
    98.        <dependency>
    99.            <groupId>org.mongodbgroupId>
    100.            <artifactId>mongodb-driver-syncartifactId>
    101.            <version>${mongodb.version}version>
    102.        dependency>
    103.        <dependency>
    104.            <groupId>org.projectlombokgroupId>
    105.            <artifactId>lombokartifactId>
    106.            <optional>trueoptional>
    107.            <version>${lombok.version}version>
    108.        dependency>
    109.        <dependency>
    110.            <groupId>org.apache.commonsgroupId>
    111.            <artifactId>commons-lang3artifactId>
    112.            <version>${commons-lang3.version}version>
    113.        dependency>
    114.        <dependency>
    115.            <groupId>org.apache.commonsgroupId>
    116.            <artifactId>commons-lang3artifactId>
    117.            <version>3.7version>
    118.        dependency>
    119.        
    120.        <dependency>
    121.            <groupId>com.fasterxml.jackson.coregroupId>
    122.            <artifactId>jackson-databindartifactId>
    123.            <version>${jackson.version}version>
    124.        dependency>
    125.        <dependency>
    126.            <groupId>com.alibabagroupId>
    127.            <artifactId>druidartifactId>
    128.            <version>${druid.version}version>
    129.        dependency>
    130.        <dependency>
    131.            <groupId>commons-codecgroupId>
    132.            <artifactId>commons-codecartifactId>
    133.            <version>1.11version>
    134.        dependency>
    135.    dependencies>
    136. dependencyManagement>
    137. <build>
    138.    <plugins>
    139.        
    140.        <plugin>
    141.            <groupId>org.apache.maven.pluginsgroupId>
    142.            <artifactId>maven-compiler-pluginartifactId>
    143.            <version>3.2version>
    144.            <configuration>
    145.                <source>1.8source>
    146.                <target>1.8target>
    147.                <encoding>UTF-8encoding>
    148.            configuration>
    149.        plugin>
    150.    plugins>
    151. build>

    tanhua-app-server

    1. <dependencies>
    2.    <dependency>
    3.        <groupId>org.springframework.bootgroupId>
    4.        <artifactId>spring-boot-starter-webartifactId>
    5.    dependency>
    6.    
    7.    <dependency>
    8.        <groupId>org.springframework.bootgroupId>
    9.        <artifactId>spring-boot-starter-data-redisartifactId>
    10.    dependency>
    11.    
    12.    <dependency>
    13.        <groupId>org.projectlombokgroupId>
    14.        <artifactId>lombokartifactId>
    15.    dependency>
    16.    
    17.    <dependency>
    18.        <groupId>org.apache.commonsgroupId>
    19.        <artifactId>commons-lang3artifactId>
    20.    dependency>
    21.    <dependency>
    22.        <groupId>com.fasterxml.jackson.coregroupId>
    23.        <artifactId>jackson-databindartifactId>
    24.    dependency>
    25.    <dependency>
    26.        <groupId>commons-codecgroupId>
    27.        <artifactId>commons-codecartifactId>
    28.    dependency>
    29.    <dependency>
    30.        <groupId>joda-timegroupId>
    31.        <artifactId>joda-timeartifactId>
    32.    dependency>
    33.    
    34.    <dependency>
    35.        <groupId>io.jsonwebtokengroupId>
    36.        <artifactId>jjwtartifactId>
    37.        <version>0.9.1version>
    38.    dependency>
    39.    
    40.    <dependency>
    41.        <groupId>com.github.tobatogroupId>
    42.        <artifactId>fastdfs-clientartifactId>
    43.        <version>1.26.7version>
    44.        <exclusions>
    45.            <exclusion>
    46.                <groupId>ch.qos.logbackgroupId>
    47.                <artifactId>logback-classicartifactId>
    48.            exclusion>
    49.        exclusions>
    50.    dependency>
    51.    
    52.    <dependency>
    53.        <groupId>com.alibaba.cloudgroupId>
    54.        <artifactId>spring-cloud-starter-dubboartifactId>
    55.    dependency>
    56.    
    57.    <dependency>
    58.        <groupId>com.alibaba.cloudgroupId>
    59.        <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
    60.    dependency>
    61.    
    62.    
    63.    <dependency>
    64.        <groupId>com.itheimagroupId>
    65.        <artifactId>tanhua-dubbo-interfaceartifactId>
    66.        <version>1.0-SNAPSHOTversion>
    67.    dependency>
    68.    <dependency>
    69.        <groupId>com.itheimagroupId>
    70.        <artifactId>tanhua-commonsartifactId>
    71.        <version>1.0-SNAPSHOTversion>
    72.    dependency>
    73.    <dependency>
    74.        <groupId>com.itheimagroupId>
    75.        <artifactId>tanhua-autoconfigartifactId>
    76.        <version>1.0-SNAPSHOTversion>
    77.    dependency>
    78. dependencies>
    79. <build>
    80.    <finalName>tanhua-app-serverfinalName>
    81.    <plugins>
    82.        <plugin>
    83.            <groupId>org.springframework.bootgroupId>
    84.            <artifactId>spring-boot-maven-pluginartifactId>
    85.            <version>2.3.9.RELEASEversion>
    86.        plugin>
    87.    plugins>
    88. build>

    tanhua-autoconfig

    1. <dependencies>
    2.    
    3.    <dependency>
    4.        <groupId>com.aliyungroupId>
    5.        <artifactId>aliyun-java-sdk-coreartifactId>
    6.        <version>4.5.3version>
    7.    dependency>
    8.    <dependency>
    9.        <groupId>com.aliyungroupId>
    10.        <artifactId>dysmsapi20170525artifactId>
    11.        <version>2.0.1version>
    12.    dependency>
    13.    
    14.    <dependency>
    15.        <groupId>com.aliyun.ossgroupId>
    16.        <artifactId>aliyun-sdk-ossartifactId>
    17.        <version>3.10.2version>
    18.    dependency>
    19.    
    20.    <dependency>
    21.        <groupId>com.aliyungroupId>
    22.        <artifactId>facebody20191230artifactId>
    23.        <version>1.0.10version>
    24.    dependency>
    25.    
    26.    <dependency>
    27.        <groupId>com.baidu.aipgroupId>
    28.        <artifactId>java-sdkartifactId>
    29.        <version>4.8.0version>
    30.    dependency>
    31.    
    32.    <dependency>
    33.        <groupId>org.springframework.bootgroupId>
    34.        <artifactId>spring-boot-starter-webartifactId>
    35.    dependency>
    36.    <dependency>
    37.        <groupId>com.easemob.imgroupId>
    38.        <artifactId>im-sdk-coreartifactId>
    39.        <version>0.2.5version>
    40.    dependency>
    41.    <dependency>
    42.        <groupId>com.aliyungroupId>
    43.        <artifactId>aliyun-java-sdk-greenartifactId>
    44.        <version>3.6.1version>
    45.    dependency>
    46. dependencies>

    tanhua-commons

    1. <dependencies>
    2.    
    3.    <dependency>
    4.        <groupId>org.apache.commonsgroupId>
    5.        <artifactId>commons-lang3artifactId>
    6.    dependency>
    7.    <dependency>
    8.        <groupId>commons-codecgroupId>
    9.        <artifactId>commons-codecartifactId>
    10.    dependency>
    11.    <dependency>
    12.        <groupId>joda-timegroupId>
    13.        <artifactId>joda-timeartifactId>
    14.    dependency>
    15.    
    16.    <dependency>
    17.        <groupId>io.jsonwebtokengroupId>
    18.        <artifactId>jjwtartifactId>
    19.        <version>0.9.1version>
    20.    dependency>
    21. dependencies>

    tanhua-dubbo-db

    1. <dependencies>
    2.    <dependency>
    3.        <groupId>org.springframework.bootgroupId>
    4.        <artifactId>spring-boot-starter-webartifactId>
    5.    dependency>
    6.    <dependency>
    7.        <groupId>com.baomidougroupId>
    8.        <artifactId>mybatis-plusartifactId>
    9.    dependency>
    10.    <dependency>
    11.        <groupId>com.baomidougroupId>
    12.        <artifactId>mybatis-plus-boot-starterartifactId>
    13.        <version>${mybatis.mybatis-plus}version>
    14.    dependency>
    15.    <dependency>
    16.        <groupId>mysqlgroupId>
    17.        <artifactId>mysql-connector-javaartifactId>
    18.    dependency>
    19.    <dependency>
    20.        <groupId>com.alibabagroupId>
    21.        <artifactId>druidartifactId>
    22.    dependency>
    23.    <dependency>
    24.        <groupId>org.projectlombokgroupId>
    25.        <artifactId>lombokartifactId>
    26.    dependency>
    27.    <dependency>
    28.        <groupId>org.apache.commonsgroupId>
    29.        <artifactId>commons-lang3artifactId>
    30.    dependency>
    31.    <dependency>
    32.        <groupId>com.fasterxml.jackson.coregroupId>
    33.        <artifactId>jackson-databindartifactId>
    34.    dependency>
    35.    <dependency>
    36.        <groupId>commons-codecgroupId>
    37.        <artifactId>commons-codecartifactId>
    38.    dependency>
    39.    <dependency>
    40.        <groupId>joda-timegroupId>
    41.        <artifactId>joda-timeartifactId>
    42.    dependency>
    43.    
    44.    <dependency>
    45.        <groupId>com.alibaba.cloudgroupId>
    46.        <artifactId>spring-cloud-starter-dubboartifactId>
    47.    dependency>
    48.    
    49.    <dependency>
    50.        <groupId>com.alibaba.cloudgroupId>
    51.        <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
    52.    dependency>
    53.    
    54.    <dependency>
    55.        <groupId>com.itheimagroupId>
    56.        <artifactId>tanhua-dubbo-interfaceartifactId>
    57.        <version>1.0-SNAPSHOTversion>
    58.    dependency>
    59. dependencies>
    60. <build>
    61.    <finalName>tanhua-dubbo-dbfinalName>
    62.    <plugins>
    63.        <plugin>
    64.            <groupId>org.springframework.bootgroupId>
    65.            <artifactId>spring-boot-maven-pluginartifactId>
    66.            <version>2.3.9.RELEASEversion>
    67.        plugin>
    68.    plugins>
    69. build>

    tanhua-dubbo-interface

    1. <dependencies>
    2.    <dependency>
    3.        <groupId>com.itheimagroupId>
    4.        <artifactId>tanhua-modelartifactId>
    5.        <version>1.0-SNAPSHOTversion>
    6.    dependency>
    7. dependencies>

    tanhua-dubbo-mongo

    1. <dependencies>
    2.    <dependency>
    3.        <groupId>org.springframework.bootgroupId>
    4.        <artifactId>spring-boot-starter-webartifactId>
    5.    dependency>
    6.    <dependency>
    7.        <groupId>org.projectlombokgroupId>
    8.        <artifactId>lombokartifactId>
    9.    dependency>
    10.    <dependency>
    11.        <groupId>org.apache.commonsgroupId>
    12.        <artifactId>commons-lang3artifactId>
    13.    dependency>
    14.    <dependency>
    15.        <groupId>com.fasterxml.jackson.coregroupId>
    16.        <artifactId>jackson-databindartifactId>
    17.    dependency>
    18.    <dependency>
    19.        <groupId>commons-codecgroupId>
    20.        <artifactId>commons-codecartifactId>
    21.    dependency>
    22.    <dependency>
    23.        <groupId>joda-timegroupId>
    24.        <artifactId>joda-timeartifactId>
    25.    dependency>
    26.    
    27.    <dependency>
    28.        <groupId>com.alibaba.cloudgroupId>
    29.        <artifactId>spring-cloud-starter-dubboartifactId>
    30.    dependency>
    31.    
    32.    <dependency>
    33.        <groupId>com.alibaba.cloudgroupId>
    34.        <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
    35.    dependency>
    36.    
    37.    <dependency>
    38.        <groupId>com.itheimagroupId>
    39.        <artifactId>tanhua-commonsartifactId>
    40.        <version>1.0-SNAPSHOTversion>
    41.    dependency>
    42.    <dependency>
    43.        <groupId>com.itheimagroupId>
    44.        <artifactId>tanhua-dubbo-interfaceartifactId>
    45.        <version>1.0-SNAPSHOTversion>
    46.    dependency>
    47. dependencies>
    48. <build>
    49.    <finalName>tanhua-dubbo-dbfinalName>
    50.    <plugins>
    51.        <plugin>
    52.            <groupId>org.springframework.bootgroupId>
    53.            <artifactId>spring-boot-maven-pluginartifactId>
    54.            <version>2.3.9.RELEASEversion>
    55.        plugin>
    56.    plugins>
    57. build>

    tanhua-model

    1. <dependencies>
    2.    
    3.    
    4.    <dependency>
    5.        <groupId>com.baomidougroupId>
    6.        <artifactId>mybatis-plusartifactId>
    7.    dependency>
    8. dependencies>

    4.6、搭建环境

    tanhua-app-server端添加引导类和配置文件application.yml

    1. //启动类
    2. @SpringBootApplication
    3. public class AppServerApplication {
    4.    public static void main(String[] args) {
    5.        SpringApplication.run(AppServerApplication.class,args);
    6.   }
    7. }

    4.7、Lombok

    lombok 提供了简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 java 代码,尤其是针对pojo。

    官网:Project Lombok

    配置安装

    导入依赖:

    1. <dependency>
    2.    <groupId>org.projectlombokgroupId>
    3.    <artifactId>lombokartifactId>
    4.    <optional>trueoptional>
    5. dependency>

    安装IDEA插件:

     

    如果不安装插件,程序可以正常执行,但是看不到生成的一些代码,如:get、set方法。

    常用注解

    • @Data:注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法

    • @Setter:注解在属性上;为属性提供 setting 方法

    • @Getter:注解在属性上;为属性提供 getting 方法

    • @Slf4j:注解在类上;为类提供一个 属性名为log 的 slf4j日志对象

    • @NoArgsConstructor:注解在类上;为类提供一个无参的构造方法

    • @AllArgsConstructor:注解在类上;为类提供一个全参的构造方法

    • @Builder:使用Builder模式构建对象

    测试一:使用@Data注解

     

    是不是很神奇?!

    测试二:使用@Slf4j注解

     

    测试:

     

    测试三:@AllArgsConstructor、@NoArgsConstructor注解的使用

     

    测试四:@Builder

    测试结果:

  • 相关阅读:
    SQL Server批量删除数据库中的表
    海外媒体宣发:海外媒体发稿6种方式方法分享
    线程、并发相关---第七篇
    Linux基础篇-文件句柄数修改
    JavaWeb基础篇中央处理器处理冗余
    基础IO —— Linux
    rust - 理解 ToOwned trait
    Prometheus监控(三)架构
    Python学习之编写学生信息管理系统
    what?es数据偏移了8小时...
  • 原文地址:https://blog.csdn.net/weixin_45481821/article/details/126847873