前言:
前面我们已经搭建了一个基础模块 今天我们就来做进一步的开发
今日任务:
文章目录
-
HRM的仓库搭建(码云)
-
系统管理需求分析
-
涉及模块
-
MybatisPlus
-
MybatisPlus与项目的集成
-
后台服务的搭建
-
后台服务集成网关
-
接口文档Swagger
-
问题
HRM的仓库搭建(码云)
在码云上搭建一个项目的一个仓库 不知道怎么操作的请参考这篇文章
IDEA中项目同步到码云
搭建好后我们需要忽略target文件
系统管理需求分析
Saas系统分析:运营方买的软件服务
数据字典:字典类型和字典明细
系统日志:记录操作日志
组织机构:员工管理,部门管理,租户类型管理,租户管理
权限控制:角色,套餐,权限,菜单管理
涉及模块
系统管理服务
后台管理系统-系统管理菜单
后台管理系统-web系统
-
课程管理
-
系统管理
-
数据字典
- 操作日志
MybatisPlus
因为这个模块比较麻烦 所以我单独写了一个博客
详情请参考这篇文章:
https://blog.csdn.net/qq_40629521/article/details/104317165
MybatisPlus与项目的集成
在子模块
hrm-basic-parent再创建一个子模块
mybatisplus-root
导入依赖
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
将模板 配置文件和生成代码的测试类也拷贝过来拷贝过来
这样就将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
然后启动
就能访问到
接下来我们就使用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
运行代码生成文件
生成成功后启动服务
然后就访问
http://localhost:2010/tenantType
就能访问到页面了
后台服务集成网关
只需要在
这个文件中添加
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
然后重启服务
测试 我们可以通过postman测试一下分页查询
新增
修改
删除
成功!
注意以下几点 :
- 生成代码后请打开查看一下 避免有的地方报错 但是idea不显示 然后重新编译一下
- 注意配置文件中的
包名 数据库账号密码和名字是否填写正确
- 修改了配置文件 记得要先提交到码云 然后重启服务
- 本项目采用的是
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
得到
成功!
问题
但是这样有一个问题就是
如果有多个服务的话 我们的前端人员 就要去记忆多个地方这样显然是不行得 所以我们就可以在网关中配置多个服务 这样操作的话网关也需要集成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
然后就能得到
说明图
今日的搭建就到这了 以后我会陆陆续续的介绍其他相关的东西 谢谢大家的观看