Springcloud微服务项目——人力资源管理(HRM)Day02 后台服务的搭建&Swagger接口

释放双眼,带上耳机,听听看~!

前言:

前面我们已经搭建了一个基础模块 今天我们就来做进一步的开发

今日任务:
Springcloud微服务项目——人力资源管理(HRM)Day02 后台服务的搭建&Swagger接口

文章目录

  • HRM的仓库搭建(码云)

  • 系统管理需求分析

  • 涉及模块

  • MybatisPlus

  • MybatisPlus与项目的集成

  • 后台服务的搭建

  • 后台服务集成网关

  • 接口文档Swagger

  • 问题

HRM的仓库搭建(码云)

在码云上搭建一个项目的一个仓库 不知道怎么操作的请参考这篇文章
IDEA中项目同步到码云

搭建好后我们需要忽略target文件
Springcloud微服务项目——人力资源管理(HRM)Day02 后台服务的搭建&Swagger接口

系统管理需求分析

Saas系统分析:运营方买的软件服务
Springcloud微服务项目——人力资源管理(HRM)Day02 后台服务的搭建&Swagger接口
数据字典:字典类型和字典明细
系统日志:记录操作日志
组织机构:员工管理,部门管理,租户类型管理,租户管理
权限控制:角色,套餐,权限,菜单管理

涉及模块

系统管理服务
后台管理系统-系统管理菜单
后台管理系统-web系统

  • 课程管理

  • 系统管理

  • 数据字典

    • 操作日志

MybatisPlus

因为这个模块比较麻烦 所以我单独写了一个博客
详情请参考这篇文章:
https://blog.csdn.net/qq_40629521/article/details/104317165

MybatisPlus与项目的集成

在子模块
hrm-basic-parent再创建一个子模块
mybatisplus-root
Springcloud微服务项目——人力资源管理(HRM)Day02 后台服务的搭建&Swagger接口
导入依赖


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1<dependencies>
2    <dependency>
3        <groupId>com.baomidou</groupId>
4        <artifactId>mybatis-plus-boot-starter</artifactId>
5        <version>2.2.0</version>
6    </dependency>
7
8    <!--模板引擎-->
9    <dependency>
10        <groupId>org.apache.velocity</groupId>
11        <artifactId>velocity-engine-core</artifactId>
12        <version>2.0</version>
13    </dependency>
14
15    <dependency>
16        <groupId>mysql</groupId>
17        <artifactId>mysql-connector-java</artifactId>
18    </dependency>
19</dependencies>
20
21

将模板 配置文件和生成代码的测试类也拷贝过来拷贝过来
Springcloud微服务项目——人力资源管理(HRM)Day02 后台服务的搭建&Swagger接口
这样就将MybatisPlus的模块集成了进来

暂时这样就OK了 等下我们就会用到


后台服务的搭建

接下来我们搭建后台服务 以系统中心为例子
创建一个后台服务的父模块
hrm-sysmanage-parent 不用导入任何依赖 只是用来管理模块



hrm-sysmanage-parent下面创建一个子模块
hrm-sysmanage-common
存放domain,query

导入相关依赖


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1<dependencies>
2    <dependency>
3        <groupId>org.springframework.boot</groupId>
4        <artifactId>spring-boot-starter-web</artifactId>
5    </dependency>
6
7    <dependency>
8        <groupId>org.springframework.boot</groupId>
9        <artifactId>spring-boot-starter-test</artifactId>
10        <scope>test</scope>
11    </dependency>
12
13    <dependency>
14        <groupId>cn.itsource</groupId>
15        <artifactId>hrm-basic-util</artifactId>
16        <version>1.0-SNAPSHOT</version>
17    </dependency>
18
19    <!--不能全部引入mybatis-plus,这是要做数据库操作,这里是不需要的,只需引入核心包解决错误而已-->
20    <dependency>
21        <groupId>com.baomidou</groupId>
22        <artifactId>mybatis-plus</artifactId>
23        <version>2.2.0</version>
24    </dependency>
25</dependencies>
26
27


hrm-sysmanage-parent下面创建一个子模块
hrm-sysmanage-service-2010
存放 controller,service,mapper
导入相关依赖


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
1 <dependencies>
2    <!--所有provider公共依賴-->
3    <dependency>
4        <groupId>org.leryoo</groupId>
5        <artifactId>hrm-sysmanage-common</artifactId>
6        <version>1.0-SNAPSHOT</version>
7    </dependency>
8    <dependency>
9        <groupId>org.springframework.boot</groupId>
10        <artifactId>spring-boot-starter-web</artifactId>
11    </dependency>
12    <dependency>
13        <groupId>org.springframework.boot</groupId>
14        <artifactId>spring-boot-starter-test</artifactId>
15        <scope>test</scope>
16    </dependency>
17    <!-- Eureka 客户端依赖 -->
18    <dependency>
19        <groupId>org.springframework.cloud</groupId>
20        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
21    </dependency>
22
23    <!--配置中心支持-->
24    <dependency>
25        <groupId>org.springframework.cloud</groupId>
26        <artifactId>spring-cloud-starter-config</artifactId>
27    </dependency>
28
29
30    <!--mybatis-plus支持-->
31    <dependency>
32        <groupId>com.baomidou</groupId>
33        <artifactId>mybatis-plus-boot-starter</artifactId>
34        <version>2.2.0</version>
35    </dependency>
36
37    <!--数据库支持-->
38    <dependency>
39        <groupId>mysql</groupId>
40        <artifactId>mysql-connector-java</artifactId>
41    </dependency>
42
43    <!--swagger2-->
44    <dependency>
45        <groupId>io.springfox</groupId>
46        <artifactId>springfox-swagger2</artifactId>
47        <version>2.9.2</version>
48    </dependency>
49    <dependency>
50        <groupId>io.springfox</groupId>
51        <artifactId>springfox-swagger-ui</artifactId>
52        <version>2.9.2</version>
53    </dependency>
54</dependencies>
55
56

编写配置文件
bootstrap.yml


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1spring:
2  profiles:
3    active: dev
4  cloud:
5    config:
6      name: application-sysmanage #码云上面名称
7      profile: ${spring.profiles.active} #环境 java -jar -D xxx jar
8      label: master #分支
9      discovery:
10        enabled: true #从eureka上面找配置服务
11        service-id: hrm-config-server #指定服务名
12      #uri: http://127.0.0.1:1299 #配置服务器 单机配置
13eureka: #eureka不能放到远程配置中
14  client:
15    service-url:
16      defaultZone: http://localhost:1010/eureka  #告诉服务提供者要把服务注册到哪儿 #单机环境
17  instance:
18    prefer-ip-address: true #显示客户端真实ip
19
20

还有application.yml


1
2
3
4
5
1spring:
2  application:
3    name: sysmanage
4
5

然后在码云中添加
application-sysmanage-dev.yml 配置文件


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1server:
2  port: 2010
3spring:
4  application:
5    name: hrm-sysmanage
6  datasource:
7    driver-class-name: com.mysql.jdbc.Driver
8    url: jdbc:mysql://localhost:3306/hrm-sys-manage
9    username: root
10    password: root
11mybatis-plus:
12  mapper-locations: classpath:cn/itsource/mapper/*Mapper.xml
13  type-aliases-package: org.leryoo.domain,org.leryoo.query
14
15

编写启动类


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1package org.leryoo;
2
3import org.springframework.boot.SpringApplication;
4import org.springframework.boot.autoconfigure.SpringBootApplication;
5import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
6
7@SpringBootApplication
8@EnableEurekaClient
9public class SysManage2010Application {
10  public static void main(String[] args) {
11      SpringApplication.run(SysManage2010Application .class, args);
12  }
13}
14
15

然后启动
Springcloud微服务项目——人力资源管理(HRM)Day02 后台服务的搭建&Swagger接口
就能访问到
Springcloud微服务项目——人力资源管理(HRM)Day02 后台服务的搭建&Swagger接口


接下来我们就使用plus代码生成器生成query和domain
导入相关依赖


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1<dependencies>
2    <dependency>
3        <groupId>org.springframework.boot</groupId>
4        <artifactId>spring-boot-starter-web</artifactId>
5    </dependency>
6    <dependency>
7        <groupId>org.springframework.boot</groupId>
8        <artifactId>spring-boot-starter-test</artifactId>
9    </dependency>
10
11    <!--不能全部引入mybatis-plus,这是要做数据库操作,这里是不需要的,只需引入核心包解决错误而已-->
12    <dependency>
13        <groupId>com.baomidou</groupId>
14        <artifactId>mybatis-plus</artifactId>
15        <version>2.2.0</version>
16    </dependency>
17
18  <!--客户端feign支持-->
19  <dependency>
20      <groupId>org.springframework.cloud</groupId>
21      <artifactId>spring-cloud-starter-openfeign</artifactId>
22  </dependency>
23
24</dependencies>
25
26

说明:
因为common类里面是不需要数据库操作的 所有我们不需要全部引入mybatis-plus的支持包 真正的数据库操作是在service里面 我们不需要在这里做数据库持久化 就不需要导入mybatis-plus-boot-starte 就导入他的mybatis-plus就好了


1
2
3
4
5
6
7
1<dependency>
2    <groupId>com.baomidou</groupId>
3    <artifactId>mybatis-plus</artifactId>
4    <version>2.2.0</version>
5</dependency>
6
7

将分页的工具类拷贝过来


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1package org.leryoo.config;
2
3import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
4import org.mybatis.spring.annotation.MapperScan;
5import org.springframework.context.annotation.Bean;
6import org.springframework.context.annotation.Configuration;
7import org.springframework.transaction.annotation.EnableTransactionManagement;
8
9//Spring boot方式
10@EnableTransactionManagement
11@Configuration
12@MapperScan("org.leryoo.mapper")
13public class MybatisPlusConfig {
14
15    /**
16     * 分页插件
17     */
18    @Bean
19    public PaginationInterceptor paginationInterceptor() {
20        return new PaginationInterceptor();
21    }
22}
23
24

然后复制一份 配置文件 因为我们以后还可能会生成很多其他的文件 所以我们需要对应起来

mybatisPlus-config-sysmanage.properties


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1#此处为本项目src所在路径(代码生成器输出路径),注意一定是当前项目所在的目录哟
2OutputDir=D:\\Users\\Leryoo\\IdeaProjects\\hrm-parent\\hrm-sysmanage-parent\\hrm-sysmanage-service-2010\\src\\main\\java
3#mapper.xml SQL映射文件目录
4OutputDirXml=D:\\Users\\Leryoo\\IdeaProjects\\hrm-parent\\hrm-sysmanage-parent\\hrm-sysmanage-service-2010\\src\\main\\resources
5#domain和query需要放到common里面
6OutputDirBase=D:\\Users\\Leryoo\\IdeaProjects\\hrm-parent\\hrm-sysmanage-parent\\hrm-sysmanage-common\\src\\main\\java
7#设置作者
8author=leryoo
9#自定义包路径
10parent=org.leryoo
11
12#数据库连接信息
13jdbc.driver=com.mysql.jdbc.Driver
14jdbc.url=jdbc:mysql:///hrm-sys-manage
15jdbc.user=root
16jdbc.pwd=root
17
18

运行代码生成文件
Springcloud微服务项目——人力资源管理(HRM)Day02 后台服务的搭建&Swagger接口
生成成功后启动服务
Springcloud微服务项目——人力资源管理(HRM)Day02 后台服务的搭建&Swagger接口
然后就访问
http://localhost:2010/tenantType
就能访问到页面了

后台服务集成网关

只需要在
Springcloud微服务项目——人力资源管理(HRM)Day02 后台服务的搭建&Swagger接口
这个文件中添加


1
2
3
4
5
6
7
8
1zuul:
2  routes:
3    sysmanage.serviceId: hrm-sysmanage #这是调用满足条件的服务名,注意要小写
4    sysmanage.path: /sysmanage/** #这是所有路径前的通配
5  ignored-services: "*" #用*来通配符,忽略从9527端口通过服务名来调用
6  prefix: "/services" #这是所有路径的前缀
7
8

同时 我们也可以把 断路器hystrix和负载均衡ribbon加上


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1ribbon:
2  ConnectTimeout: 250 # 连接超时时间(ms)
3  ReadTimeout: 2000 # 通信超时时间(ms)
4  OkToRetryOnAllOperations: true # 是否对所有操作重试
5  MaxAutoRetriesNextServer: 2 # 同一服务不同实例的重试次数
6  MaxAutoRetries: 1 # 同一实例的重试次数
7hystrix:
8  command:
9    default:
10      execution:
11        isolation:
12          thread:
13            timeoutInMillisecond: 3000 # 熔断超时时长:3000ms
14
15

然后重启服务
Springcloud微服务项目——人力资源管理(HRM)Day02 后台服务的搭建&Swagger接口
测试 我们可以通过postman测试一下分页查询
Springcloud微服务项目——人力资源管理(HRM)Day02 后台服务的搭建&Swagger接口
新增
Springcloud微服务项目——人力资源管理(HRM)Day02 后台服务的搭建&Swagger接口
Springcloud微服务项目——人力资源管理(HRM)Day02 后台服务的搭建&Swagger接口
修改
Springcloud微服务项目——人力资源管理(HRM)Day02 后台服务的搭建&Swagger接口
Springcloud微服务项目——人力资源管理(HRM)Day02 后台服务的搭建&Swagger接口
删除
Springcloud微服务项目——人力资源管理(HRM)Day02 后台服务的搭建&Swagger接口
Springcloud微服务项目——人力资源管理(HRM)Day02 后台服务的搭建&Swagger接口
成功!
注意以下几点 :

  1. 生成代码后请打开查看一下 避免有的地方报错 但是idea不显示 然后重新编译一下
  2. 注意配置文件中的

包名 数据库账号密码和名字是否填写正确

  1. 修改了配置文件 记得要先提交到码云 然后重启服务
  2. 本项目采用的是

RESTful风格 在用postman测试的时候记得
选对应的操作

RESTful
面向资源编程,在项目中其他domain就是资源
1)用url来表示资源 /tenantType/1 id为1租户类型
2)http请求方式来表示操作
——post 添加
——put修改 或者保存
——delete 删除
——get 查询

接口文档Swagger

导入依赖


1
2
3
4
5
6
7
8
9
10
11
12
13
14
1<!--引入swagger支持-->
2<dependency>
3    <groupId>io.springfox</groupId>
4    <artifactId>springfox-swagger2</artifactId>
5    <version>2.9.2</version>
6</dependency>
7<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
8<dependency>
9    <groupId>io.springfox</groupId>
10    <artifactId>springfox-swagger-ui</artifactId>
11    <version>2.9.2</version>
12</dependency>
13
14

配置类


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
1package org.leryoo.config;
2
3import org.springframework.context.annotation.Bean;
4import org.springframework.context.annotation.Configuration;
5import springfox.documentation.builders.ApiInfoBuilder;
6import springfox.documentation.builders.PathSelectors;
7import springfox.documentation.builders.RequestHandlerSelectors;
8import springfox.documentation.service.ApiInfo;
9import springfox.documentation.service.Contact;
10import springfox.documentation.spi.DocumentationType;
11import springfox.documentation.spring.web.plugins.Docket;
12import springfox.documentation.swagger2.annotations.EnableSwagger2;
13
14@Configuration
15@EnableSwagger2
16public class Swagger2 {
17
18    @Bean
19    public Docket createRestApi() {
20        return new Docket(DocumentationType.SWAGGER_2)
21                .apiInfo(apiInfo())
22                .select()
23                //对外暴露服务的包,以controller的方式暴露,所以就是controller的包.
24                .apis(RequestHandlerSelectors.basePackage("org.leryoo.controller"))
25                .paths(PathSelectors.any())
26                .build();
27    }
28
29
30    private ApiInfo apiInfo() {
31        return new ApiInfoBuilder()
32                .title("系统中心api")
33                .description("系统中心服务接口文档说明")
34                .contact(new Contact("leryoo", "", "xxxx@163.com"))
35                .version("1.0")
36                .build();
37    }
38
39}
40
41

访问:
http://localhost:2010/swagger-ui.html
得到
Springcloud微服务项目——人力资源管理(HRM)Day02 后台服务的搭建&Swagger接口
成功!


问题

但是这样有一个问题就是

如果有多个服务的话 我们的前端人员 就要去记忆多个地方这样显然是不行得 所以我们就可以在网关中配置多个服务 这样操作的话网关也需要集成swagger 然后让网关进行相应的一个转发

首先 网关zuul也需要导入swagger的一个依赖
上面有我就不再写了
然后再网关中也需要导入两个配置文件:
DocumentationConfig.java 配置转发规则


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
1package org.leryoo.config;
2
3import org.springframework.context.annotation.Primary;
4import org.springframework.stereotype.Component;
5import springfox.documentation.swagger.web.SwaggerResource;
6import springfox.documentation.swagger.web.SwaggerResourcesProvider;
7
8import java.util.ArrayList;
9import java.util.List;
10
11/**
12 * 配置转发规则
13 */
14@Component
15@Primary
16public class DocumentationConfig implements SwaggerResourcesProvider {
17    @Override
18    public List<SwaggerResource> get() {
19        List resources = new ArrayList<>();
20
21        resources.add(swaggerResource("系统中心", "/services/sysmanage/v2/api-docs", "2.0"));
22        resources.add(swaggerResource("系统管理1", "/services/sysmanage/v2/api-docs", "2.0"));
23        resources.add(swaggerResource("系统管理2", "/services/sysmanage/v2/api-docs", "2.0"));
24        return resources;
25
26    }
27
28    private SwaggerResource swaggerResource(String name, String location, String version) {
29        SwaggerResource swaggerResource = new SwaggerResource();
30        swaggerResource.setName(name);
31        swaggerResource.setLocation(location);
32        swaggerResource.setSwaggerVersion(version);
33        return swaggerResource;
34    }
35}
36
37

SwaggerConfig.java


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
1package org.leryoo.config;
2
3import org.springframework.context.annotation.Bean;
4import org.springframework.context.annotation.Configuration;
5import org.springframework.context.annotation.Primary;
6import org.springframework.stereotype.Component;
7import springfox.documentation.builders.ApiInfoBuilder;
8import springfox.documentation.service.ApiInfo;
9import springfox.documentation.service.Contact;
10import springfox.documentation.spi.DocumentationType;
11import springfox.documentation.spring.web.plugins.Docket;
12import springfox.documentation.swagger.web.SwaggerResource;
13import springfox.documentation.swagger.web.SwaggerResourcesProvider;
14import springfox.documentation.swagger.web.UiConfiguration;
15import springfox.documentation.swagger2.annotations.EnableSwagger2;
16
17import java.util.ArrayList;
18import java.util.List;
19
20@Configuration
21@EnableSwagger2
22public class SwaggerConfig {
23
24    @Bean
25    public Docket createRestApi() {
26        return new Docket(DocumentationType.SWAGGER_2)
27                .apiInfo(apiInfo());
28    }
29
30    private ApiInfo apiInfo() {
31        return new ApiInfoBuilder()
32                .title("人力资源系统后端接口")
33                .description("人力资源系统接口文档说明")
34                .termsOfServiceUrl("http://localhost:8081") //可以写公司官网
35                .contact(new Contact("leryoo", "", "liyiyi@163.com"))
36                .version("1.0")
37                .build();
38    }
39
40}
41
42

然后通过网关访问
http://localhost:1030/swagger-ui.html
然后就能得到
Springcloud微服务项目——人力资源管理(HRM)Day02 后台服务的搭建&Swagger接口
说明图
Springcloud微服务项目——人力资源管理(HRM)Day02 后台服务的搭建&Swagger接口

今日的搭建就到这了 以后我会陆陆续续的介绍其他相关的东西 谢谢大家的观看

给TA打赏
共{{data.count}}人
人已打赏
安全网络

CDN安全市场到2022年价值76.3亿美元

2018-2-1 18:02:50

安全网络

2016中国电信产业峰会,卓易科技再获大奖

2016-12-18 18:33:29

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索