spring-cloud项目搭建流程

Spring-Cloud项目搭建

1.课程介绍

1.HRM项目基本介绍

2.HRM项目原型(重点)

3.系统管理后端搭建(重点)

4.Mybatis-plus集成(重点)

5.Swagger集成
6.Gitee管理项目
2.项目基本介绍
2.1.项目背景
找工作的人、想学习的人
现在社会竞争压力越来愈大,很多应届毕业生毕业后没法直接胜任某类工作,或者是一些已经工作的人慢慢丧失自己学习的能力,最终导致失业无法再次就业。
招聘的单位
虽然求职者非常多,但是很多人的能力达不到用人企业的要求,他们期望一招聘进来马上就能使用,所以需要对求职候选人进行培养筛选。
培训机构
很多培训机构虽然有能力培训人才但是,市场能力比较差,找不到合适的学员,让他们通过培训能找到工作

正是由于以上三类场景,所以我们开发一个源码人力综合平台,让找工作的人,能够选择特定机构的课程学习,并参与平台发布的招聘,而且还能参与一些活动。 让招聘单位入驻进来发布岗位进行招聘,甚至委托培训机构培训合适的人才。对于配置机构可以发布课程,吸收学员来完成学习并通过收取学费获取商业价值。

2.2.功能模块
在这里插入图片描述

2.3.项目原型
通过项目原型进一步了解项目的功能,包括:门户首页、课程搜索页、个人中心等 参考“项目原型”
3.项目技术架构
3.1.技术架构
在这里插入图片描述

项目采用主流的前后端分离模式,前端分为系统管理前端,门户网站前端(职位站点,课程站点,用户中心等等)。

3.2.技术栈
系统管理前端采用技术栈为
Node.js,Vue.js,Npm,WebPack,Vue Cli ,Element UI ,Easy Mock等等。
门户网站前端技术栈为
Html ,css,js ,jquery等等。
后端采用微服务架构技术栈为
微服务架构:按照功能拆分N多个服务,每个服务可以独立技术选型,独立开发,独立部署,独立运维.,单个服务使用基于ssm的springboot,服务间通过spring cloud协调.技术包括:

MyBatis-Plus,SpringBoot ,SpringMvc,SpringCloud(Eureka/Nacos,Zuul/Gateway,Config/Nacos,Feign,Hystrix/Sentinel等等),Redis,Fastdfs/Aicloud OSS,ElasticSearch,RabbitMQ,Velocity; 运维方面:阿里云服务器,Docker,Jenkins,Rancher,K8S等等。

3.3.项目原型图

在这里插入图片描述

3.4.开发步骤

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

1.接项目,立项
2.需求分析(产品经理) ,需求文档,概要设计,功能原型图,梳理用户的需求,分析业务流程
3.项目经理组建团队开发 PM,SE,TM=PM+SE,项目启动会,开发人员培训(SE),项目原型搭建(SE) 开发文档
4.开发(开发工程师)
a)接口定义,根据需求分析定义接口
b)服务端和前端并行开发 ,依据接口进行服务端接口开发。 postman测试
c)前端开发用户操作界面,并请求服务端接口完成业务处理。 EasyMock模拟数据
d)前后端集成测试 最终前端调用服务端接口完成业务。
5.测试人员测试
6.上线 运维人员
7.运维-留一两个人
8.开发其他项目

4.后端项目微服务原型搭建
4.1.创建Git仓库(省略)
4.1.1.登录码云创建仓库
4.1.2.本地克隆仓库
4.1.3.创建项目到仓库目录
4.1.4.忽略不需要提交的内容

4.2.项目结构搭建

hrm-parent                       //管理jar:SpringBoot;SpringCloud,一些公共的内容
    hrm-support-parent 		     //springcloud微服务支持模块
hrm-eureka-server-1010
hrm-zuul-server-1020
hrm-config-server-1030
hrm-basic-parent              //基础模块
    hrm-basic-util            //工具 : AjaxResult ,PageList
    hrm-basic-common          //公共模块: BaseDoamin ,BaseQuery
hrm-system-parent             //系统管理中心
    hrm-system-common         //system的公共代码 :SystemQuery ,Domain
    hrm-system-server-1040    //系统管理中心服务Controller,Service,Mapper
hrm-course-parent               //课程中心
    hrm-course-common         //公共代码
    hrm-course-server-1050    //课程中心服务
Hrm-redis-parent
    Hrm-redis-feign           //feign客户端接口模块
    Hrm-redis-server-1060     //缓存服务
Hrm-elasticsearch-parent
    Hrm-elasticsearch-feign           //feign客户端接口模块
    Hrm-elasticsearch-server-1070     //缓存服务
hrm-user-parent               //用户中心
    hrm-user-common           //公共代码
    hrm-user-server-1080      //用户中心服务

4.3.前端结构搭建
暂时不管,后面再来搭建

hrm-websites-parent
hrm-website-system
     hrm-website-course
     hrm-website-user
     hrm-website-job
     hrm-website-active

4.4.SpringCloud集成
4.4.1.顶级父工程 hrm-parent

 <?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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.itsource.hrm</groupId>
    <artifactId>hrm-parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>hrm-basic-parent</module>
        <module>hrm-support-parent</module>
        <module>hrm-system-parent</module>
    </modules>

    <!--管理一些公共的属性-->
    <properties>
       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <!--管理SpringBoot-->
    <parent>
        <groupId> org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
    </parent>

    <!--管理Spring Cloud-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


    <!--公共的jar包-->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
</project>

4.4.2.Eureka注册中心

1)创建项目

hrm-parent
    hrm-support-parent 					//springcloud微服务支持模块
hrm-eureka-server-1010

2)pom.xml

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
      <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

3)配置文件

spring:
  application:
    name: hrm-eureka
server:
  port: 1010
eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #单机配置

4)入口类

/*注册中心启动类*/
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication1010
{
    public static void main( String[] args )
    {
        SpringApplication.run(EurekaServerApplication1010.class) ;
    }
}

5)启动测试

访问:http://localhost:1010

4.4.3.Zuul 服务网关

1)创建项目

hrm-parent
    hrm-support-parent 					//springcloud微服务支持模块
hrm-zuul-server-1020

2)导入jar

<!-- springBoot支持 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Eureka 客户端依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
       
         <!-- zuul支持-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>

3)做配置

#注册中心 , 服务的配置 ,zuul的配置(前缀,忽略服务 ,路由)

eureka:
  client:
    registry-fetch-interval-seconds: 5
    serviceUrl:
      defaultZone: http://localhost:1010/eureka/
  instance:
    prefer-ip-address: true  #使用ip注册到Eureka
    instance-id: zuul-server:1020  #指定客户端实例的ID 
server:
  port: 1020
spring:
  application:
    name: zuul-server #服务名
zuul:
  prefix: "/hrm" #统一访问的前缀
  ignored-services: "*" #所有的服务都不要使用服务名的方式去访问
  routes:
    system-server: "/system/**" #系统管理服务 
  retryable: true #是否开启重试功能
  ribbon:
    eager-load.enabled: true  	# 饥饿加载
ribbon:
  MaxAutoRetries: 1 #对当前服务的重试次数
  MaxAutoRetriesNextServer: 1 #切换相同Server的次数
  OkToRetryOnAllOperations: false # 对所有的操作请求都进行重试,如post就不能重试,如果没做幂等处理,重试多次post会造成数据的多次添加或修改
  ConnectTimeout: 10000 #请求连接的超时时间
  ReadTimeout: 10000 #请求处理的超时时间
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 15000
            #如果配置ribbon的重试,hystrix的超时时间要大于ribbon的超时时间

4)入口

//@EnableZuulProxy :开启zuul
@SpringBootApplication
@EnableZuulProxy
@EnableEurekaClient
public class ZuulServerApplication1020 {
    public static void main(String[] args) {
        SpringApplication.run(ZuulServerApplication1020.class) ;
    }
}

5)启动测试

在Eureka中有Zuul就ok

4.4.4.Config Server
1)Gitee仓库创建
2)配置中心Config Server搭建
3)zuul集成Config Client

4.4.5.基础模块(basic)

Hrm-parent
		hrm-basic-parent  基础模块
		hrm-basic-util 工具
		hrm-basic-common

1)基础工具模块(basic-util)

拷贝基础工具到该模块化中

2)基础公共模块

拷贝BaseQuery到模块中

5.系统管理中心

有一个数据字典很多模块都要使用,先把他实现了

5.1.创建项目
5.1.1.创建模块

hrm-system-parent 系统管理中心
    hrm-system-common 公共代码:domain,query
    hrm-system-server-1040   系统管理中心服务: mapper,service,controller

5.1.2.hrm-system-server-1040导入pom

<dependencies>
    <!--所有provider公共依賴-->
    <dependency>
        <groupId>cn.itsource.hrm</groupId>
        <artifactId>hrm-system-common</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Eureka 客户端依赖 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
        
</dependencies>

5.1.3.yml配置

server:
  port: 1040
spring:
  application:
    name: hrm-system
eureka:
  client:
    service-url:
      defaultZone: http://localhost:1010/eureka
  instance:
    prefer-ip-address: true
    instance-id: zuul-server:1020  #指定客户端实例的ID 

5.1.4.入口类

/**
 * 主启动配置类
 */
@SpringBootApplication
@EnableEurekaClient
public class SystemServerApplication2010
{
    public static void main( String[] args )
    {
        SpringApplication.run(SystemServerApplication2010.class);
    }
}

5.1.5.测试

能够注册到Eureka

5.2.网关配置路由
如果已经在搭建zuul的时候配置了那么现在就不用配置了

zuul:
  prefix: "/hrm" #统一访问的前缀
  ignored-services: "*" #所有的服务都不要使用服务名的方式去访问
  routes:
    system-server: "/system/**" #系统管理服务 

6.MybatisPlus集成
6.1.引入
在真实项目开发中我们的服务模块,一般都要进行数据库操作,并且每个domain都有crud,需多次写重复代码。我们使用MybatisPlus,就不用写重复代码,并且还有模板的功能,可以一键生成daomin,query,mapper接口,mapper.xml,service,controller,非常好用。
6.2.简介
6.2.1.mybatisplus是什么

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

6.2.2.mybatisplus特点

无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer2005、SQLServer 等多种数据库
支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
支持 XML 热加载Mapper 对应的 XML支持热加载对于简单的 CRUD 操作甚至可以无 XML 启动
支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
支持关键词自动转义:支持数据库关键词(order、key…)自动转义,还可自定义关键词
内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
内置性能分析插件:可输出 Sql 语句以及其执行时间建议开发测试时启用该功能,能快速揪出慢查询
内置全局拦截插件:提供全表 delete,update 操作智能分析阻断也可自定义拦截规则,预防误操作
内置 Sql 注入剥离器:支持 Sql 注入剥离,有效预防 Sql 注入攻击

6.2.3.结构(了解)
在这里插入图片描述

我们的微服务要生成代码,也要连接数据库,需要集成MyBatis-Plus,同时我们需要搭建一个代码生成器模块,它需要集成Mybatis-plus和Velocity
在这里插入图片描述

6.3.代码生成项目 - mybatisplus的模块

可以重新开一个项目,也可以就在原来项目里面。为了不影响运行的代码重新开项目。

步骤分析:
1 创建springboot项目
2 导入jar
3 配置
3 写代码测试
6.3.1.创建项目并导入jar

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>

        <!--模板引擎-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.0</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

6.3.2.配置
resource/mybatiesplus-config-system.properties

#代码输出基本路径
OutputDir=C:/Users/Administrator/Desktop/java1107/code/hrm-1107/hrm-parent/hrm-system-parent/hrm-system-server-2010/src/main/java

#mapper.xml SQL映射文件目录
OutputDirXml=C:/Users/Administrator/Desktop/java1107/code/hrm-1107/hrm-parent/hrm-system-parent/hrm-system-server-2010/src/main/resources

#domain的输出路径
OutputDirBase=C:/Users/Administrator/Desktop/java1107/code/hrm-1107/hrm-parent/hrm-system-parent/hrm-system-common/src/main/java

#设置作者
author=whale.chen

#自定义包路径:基础包的路径
parent=cn.itsource.hrm

#数据库连接信息
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///hrm-system
jdbc.user=root
jdbc.pwd=123456

6.3.3.写代码测试

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DbType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.*;

/**
 * 生成代码的主类
 */
public class GenteratorCode {

    public static void main(String[] args) throws InterruptedException {
        //用来获取Mybatis-Plus.properties文件的配置信息
        ResourceBundle rb = ResourceBundle.getBundle("mybatiesplus-config-system"); //不要加后缀
        AutoGenerator mpg = new AutoGenerator();
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir(rb.getString("OutputDir"));
        gc.setFileOverride(false);
        gc.setActiveRecord(true);// 开启 activeRecord 模式
        gc.setEnableCache(false);// XML 二级缓存
        gc.setBaseResultMap(true);// XML ResultMap
        gc.setBaseColumnList(false);// XML columList
        gc.setAuthor(rb.getString("author"));
        mpg.setGlobalConfig(gc);
        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DbType.MYSQL);
        dsc.setTypeConvert(new MySqlTypeConvert());
        dsc.setDriverName(rb.getString("jdbc.driver"));
        dsc.setUsername(rb.getString("jdbc.user"));
        dsc.setPassword(rb.getString("jdbc.pwd"));
        dsc.setUrl(rb.getString("jdbc.url"));
        mpg.setDataSource(dsc);
        // 表策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setTablePrefix(new String[] { "t_" });// 此处可以修改为您的表前缀
        strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略

        strategy.setInclude(new String[]{
                "表名字"
        }); // 需要生成的表

        mpg.setStrategy(strategy);
        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent(rb.getString("parent"));  //cn.itsource.hrm
        pc.setController("web.controller"); //cn.itsource.hrm.web.controller
        pc.setService("service");
        pc.setServiceImpl("service.impl");
        pc.setEntity("domain");
        pc.setMapper("mapper");
        mpg.setPackageInfo(pc);

        // 注入自定义配置,可以在 VM 中使用 cfg.abc 【可无】
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                Map<String, Object> map = new HashMap<String, Object>();
                map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-rb");
                this.setMap(map);
            }
        };

        List<FileOutConfig> focList = new ArrayList<FileOutConfig>();

        //controller的输出配置
        focList.add(new FileOutConfig("/templates/controller.java.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                //合并好的内容输出到哪儿?
                return rb.getString("OutputDir")+ "/cn/itsource/hrm/web/controller/" + tableInfo.getEntityName() + "Controller.java";
            }
        });
        //query的输出配置
        focList.add(new FileOutConfig("/templates/query.java.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return rb.getString("OutputDirBase")+ "/cn/itsource/hrm/query/" + tableInfo.getEntityName() + "Query.java";
            }
        });

        // 调整 domain 生成目录演示
        focList.add(new FileOutConfig("/templates/entity.java.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return rb.getString("OutputDirBase")+ "/cn/itsource/hrm/domain/" + tableInfo.getEntityName() + ".java";
            }
        });

        // 调整 xml 生成目录演示
        focList.add(new FileOutConfig("/templates/mapper.xml.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return rb.getString("OutputDirXml")+ "/cn/itsource/hrm/mapper/" + tableInfo.getEntityName() + "Mapper.xml";
            }
        });
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);

        // 自定义模板配置,可以 copy 源码 mybatis-plus/src/main/resources/templates 下面内容修改,
        // 放置自己项目的 src/main/resources/templates 目录下, 默认名称一下可以不配置,也可以自定义模板名称
        TemplateConfig tc = new TemplateConfig();
        tc.setService("/templates/service.java.vm");
        tc.setServiceImpl("/templates/serviceImpl.java.vm");
        tc.setMapper("/templates/mapper.java.vm");
        tc.setEntity(null);
        tc.setController(null);
        tc.setXml(null);
        // 如上任何一个模块如果设置 空 OR Null 将不生成该模块。
        mpg.setTemplate(tc);

        // 执行生成
        mpg.execute();
    }
}

6.3.4.拷贝模块

query对象模板,以及Controller模板

6.3.5.生成数据字典代码

找一个表数据字典生成代码
6.4.微服务集成MyBatis-plus
6.4.1.hrm-system-common模块

1.hrm-basic-util模块拷贝工具类

去课件资料 reousrces/工具类 里面找

2.hrm-system-commo 导入mybatis-plus依赖

注意:hrm-system-common只需要导入 mybatis-plus-boot-starter,hrm-basic-util 依赖即可

<dependencies>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>2.2.0</version>
    </dependency>
   <dependency>
    <groupId>cn.itsource</groupId>
    <artifactId>hrm-basic-common</artifactId>
    <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

hrm-system-server-1040服务调整

6.4.2.导入mybatis-plus jar

修改 hrm-system-server-1040 导入如下依赖:

<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>2.2.0</version>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
       <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.9</version>
        </dependency>
<dependency>
    <groupId>cn.itsource.hrm</groupId>
    <artifactId>hrm-system-common</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

6.4.3.配置application.yml

spring:
  application:
    name: system-server #服务名
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql:///hrm-system
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
mybatis-plus: #集成MyBatis-Plus
  mapper-locations: classpath:cn/itsource/hrm/mapper/*Mapper.xml
  #type-aliases-package: cn.itsource.hrm.domain,cn.itsource.hrm.query  

6.4.4.MyBatis-Plus配置类

import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

//Spring boot方式
@Configuration
@MapperScan("cn.itsource.hrm.mapper") //mapper接口扫描
@EnableTransactionManagement  //事务管理
public class MybatisPlusConfig {

    /**
     * 分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

6.4.5.程序入口类

package cn.itsource.hrm;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableEurekaClient
public class SystemServerApplication2010{
    public static void main(String[] args) {
        SpringApplication.run(App.class,args);
    }
}

6.4.6.测试-生成代码后再做测试

package cn.itsource.hrm;

import cn.itsource.hrm.domain.User;
import cn.itsource.hrm.service.IUserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class)
public class UserServiceTest {
    @Autowired
    private IUserService userService;

    @Test
    public void testGetAll()throws Exception{

        System.out.println(userService.selectById(1L));
//        userService.insert(new User());
//        userService.updateById(new User());
//        userService.deleteById(1L);
        for (User user : userService.selectList(null)) {
            System.out.println(user);
        }
    }
}

6.5.系统管理-数据字典

数据字典就是把系统中的一些不会经常变的一些数据项,使用2个表来维护,数据项的类型使用数据字典类型表,数据项的明细列表使用数据字典的明细表 来维护。

使用代码生成器生成基础代码,然后对接VUE前端做CRUD

在这里插入图片描述在这里插入图片描述

6.5.1.表设计

在这里插入图片描述

多对一设计

6.5.2.接口测试工具postman

使用postmain测试数据字典接口

7.System-server集成Swagger
7.1.什么是swagger
接口文档在前面学过,这里不多做介绍,我们直接来集成
7.2.System集成Swagger
7.2.1.导入依赖

<!--引入swagger支持-->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>

7.2.2.Swagger配置类

@Configuration
@EnableSwagger2
public class Swagger2 {
 
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //对外暴露服务的包,以controller的方式暴露,所以就是controller的包.
                .apis(RequestHandlerSelectors.basePackage("cn.itsource.hrm.web.controller"))
                .paths(PathSelectors.any())
                .build();
    }


    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("平台服务api")
                .description("平台服务接口文档说明")
                .contact(new Contact("whale.chen", "", "whale.chen@itsource.cn"))
                .version("1.0")
                .build();
    }

}

访问本项目地址:http://127.0.0.1:1040/swagger-ui.html

7.3.网关配置Swagger

前端开发每次都要记录每个服务ip不好,期望只记忆网关ip就ok,需要做配置

7.3.1.导入依赖

  <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

7.3.2.Swagger配置类

package cn.itsource.hrm.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger.web.SwaggerResource;
import springfox.documentation.swagger.web.SwaggerResourcesProvider;
import springfox.documentation.swagger.web.UiConfiguration;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;
import java.util.List;

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo());
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("源码人力资源系统")
                .description("源码人力资源接口文档说明")
                .termsOfServiceUrl("http://localhost:1020")
                .contact(new Contact("whale.chen", "", "whale.chen@itsoruce.cn"))
                .version("1.0")
                .build();
    }
}
package cn.itsource.hrm.config;

import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import springfox.documentation.swagger.web.SwaggerResource;
import springfox.documentation.swagger.web.SwaggerResourcesProvider;

import java.util.ArrayList;
import java.util.List;

@Component
@Primary
public class DocumentationConfig implements SwaggerResourcesProvider {
    @Override
    public List<SwaggerResource> get() {
       List resources = new ArrayList<>();
       resources.add(swaggerResource("系统管理", "/hrm/system/v2/api-docs", "2.0"));
       return resources;
    }

    private SwaggerResource swaggerResource(String name, String location, String version) {
        SwaggerResource swaggerResource = new SwaggerResource();
        swaggerResource.setName(name);
        swaggerResource.setLocation(location);
        swaggerResource.setSwaggerVersion(version);
        return swaggerResource;
    }
}

测试:http://127.0.0.1:1020/swagger-ui.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值