Springcloud微服務項目——人力資源管理(HRM)Day02 後臺服務的搭建&Swagger接口

前言:

前面我們已經搭建了一個基礎模塊 今天我們就來做進一步的開發

今日任務:
在這裏插入圖片描述

HRM的倉庫搭建(碼雲)

在碼雲上搭建一個項目的一個倉庫 不知道怎麼操作的請參考這篇文章
IDEA中項目同步到碼雲

搭建好後我們需要忽略target文件
在這裏插入圖片描述

系統管理需求分析

Saas系統分析:運營方買的軟件服務
在這裏插入圖片描述
數據字典:字典類型和字典明細
系統日誌:記錄操作日誌
組織機構:員工管理,部門管理,租戶類型管理,租戶管理
權限控制:角色,套餐,權限,菜單管理

涉及模塊

系統管理服務
後臺管理系統-系統管理菜單
後臺管理系統-web系統

  • 課程管理
  • 系統管理
    • 數據字典
    • 操作日誌

MybatisPlus

因爲這個模塊比較麻煩 所以我單獨寫了一個博客
詳情請參考這篇文章:
https://blog.csdn.net/qq_40629521/article/details/104317165

MybatisPlus與項目的集成

在子模塊hrm-basic-parent再創建一個子模塊mybatisplus-root
在這裏插入圖片描述
導入依賴

<dependencies>
    <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>
</dependencies>

將模板 配置文件和生成代碼的測試類也拷貝過來拷貝過來
在這裏插入圖片描述
這樣就將MybatisPlus的模塊集成了進來

暫時這樣就OK了 等下我們就會用到


後臺服務的搭建

接下來我們搭建後臺服務 以系統中心爲例子
創建一個後臺服務的父模塊 hrm-sysmanage-parent 不用導入任何依賴 只是用來管理模塊


hrm-sysmanage-parent下面創建一個子模塊 hrm-sysmanage-common 存放domain,query

導入相關依賴

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>cn.itsource</groupId>
        <artifactId>hrm-basic-util</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

    <!--不能全部引入mybatis-plus,這是要做數據庫操作,這裏是不需要的,只需引入核心包解決錯誤而已-->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus</artifactId>
        <version>2.2.0</version>
    </dependency>
</dependencies>

hrm-sysmanage-parent下面創建一個子模塊 hrm-sysmanage-service-2010 存放 controller,service,mapper
導入相關依賴

 <dependencies>
    <!--所有provider公共依賴-->
    <dependency>
        <groupId>org.leryoo</groupId>
        <artifactId>hrm-sysmanage-common</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <!-- Eureka 客戶端依賴 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>

    <!--配置中心支持-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>


    <!--mybatis-plus支持-->
    <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>

    <!--swagger2-->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>
</dependencies>

編寫配置文件
bootstrap.yml

spring:
  profiles:
    active: dev
  cloud:
    config:
      name: application-sysmanage #碼雲上面名稱
      profile: ${spring.profiles.active} #環境 java -jar -D xxx jar
      label: master #分支
      discovery:
        enabled: true #從eureka上面找配置服務
        service-id: hrm-config-server #指定服務名
      #uri: http://127.0.0.1:1299 #配置服務器 單機配置
eureka: #eureka不能放到遠程配置中
  client:
    service-url:
      defaultZone: http://localhost:1010/eureka  #告訴服務提供者要把服務註冊到哪兒 #單機環境
  instance:
    prefer-ip-address: true #顯示客戶端真實ip

還有application.yml

spring:
  application:
    name: sysmanage

然後在碼雲中添加 application-sysmanage-dev.yml 配置文件

server:
  port: 2010
spring:
  application:
    name: hrm-sysmanage
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/hrm-sys-manage
    username: root
    password: root
mybatis-plus:
  mapper-locations: classpath:cn/itsource/mapper/*Mapper.xml
  type-aliases-package: org.leryoo.domain,org.leryoo.query

編寫啓動類

package org.leryoo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

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

然後啓動
在這裏插入圖片描述
就能訪問到
在這裏插入圖片描述


接下來我們就使用plus代碼生成器生成query和domain
導入相關依賴

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>

    <!--不能全部引入mybatis-plus,這是要做數據庫操作,這裏是不需要的,只需引入核心包解決錯誤而已-->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus</artifactId>
        <version>2.2.0</version>
    </dependency>

	<!--客戶端feign支持-->
	<dependency>
	    <groupId>org.springframework.cloud</groupId>
	    <artifactId>spring-cloud-starter-openfeign</artifactId>
	</dependency>

</dependencies>

說明:
因爲common類裏面是不需要數據庫操作的 所有我們不需要全部引入mybatis-plus的支持包 真正的數據庫操作是在service裏面 我們不需要在這裏做數據庫持久化 就不需要導入mybatis-plus-boot-starte 就導入他的mybatis-plus就好了

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

將分頁的工具類拷貝過來

package org.leryoo.config;

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方式
@EnableTransactionManagement
@Configuration
@MapperScan("org.leryoo.mapper")
public class MybatisPlusConfig {

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

然後複製一份 配置文件 因爲我們以後還可能會生成很多其他的文件 所以我們需要對應起來
mybatisPlus-config-sysmanage.properties

#此處爲本項目src所在路徑(代碼生成器輸出路徑),注意一定是當前項目所在的目錄喲
OutputDir=D:\\Users\\Leryoo\\IdeaProjects\\hrm-parent\\hrm-sysmanage-parent\\hrm-sysmanage-service-2010\\src\\main\\java
#mapper.xml SQL映射文件目錄
OutputDirXml=D:\\Users\\Leryoo\\IdeaProjects\\hrm-parent\\hrm-sysmanage-parent\\hrm-sysmanage-service-2010\\src\\main\\resources
#domain和query需要放到common裏面
OutputDirBase=D:\\Users\\Leryoo\\IdeaProjects\\hrm-parent\\hrm-sysmanage-parent\\hrm-sysmanage-common\\src\\main\\java
#設置作者
author=leryoo
#自定義包路徑
parent=org.leryoo

#數據庫連接信息
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///hrm-sys-manage
jdbc.user=root
jdbc.pwd=root

運行代碼生成文件
在這裏插入圖片描述
生成成功後啓動服務
在這裏插入圖片描述
然後就訪問
http://localhost:2010/tenantType
就能訪問到頁面了

後臺服務集成網關

只需要在
在這裏插入圖片描述
這個文件中添加

zuul:
  routes:
    sysmanage.serviceId: hrm-sysmanage #這是調用滿足條件的服務名,注意要小寫
    sysmanage.path: /sysmanage/** #這是所有路徑前的通配
  ignored-services: "*" #用*來通配符,忽略從9527端口通過服務名來調用
  prefix: "/services" #這是所有路徑的前綴

同時 我們也可以把 斷路器hystrix和負載均衡ribbon加上

ribbon:
  ConnectTimeout: 250 # 連接超時時間(ms)
  ReadTimeout: 2000 # 通信超時時間(ms)
  OkToRetryOnAllOperations: true # 是否對所有操作重試
  MaxAutoRetriesNextServer: 2 # 同一服務不同實例的重試次數
  MaxAutoRetries: 1 # 同一實例的重試次數
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMillisecond: 3000 # 熔斷超時時長:3000ms

然後重啓服務
在這裏插入圖片描述
測試 我們可以通過postman測試一下分頁查詢
在這裏插入圖片描述
新增
在這裏插入圖片描述
在這裏插入圖片描述
修改
在這裏插入圖片描述
在這裏插入圖片描述
刪除
在這裏插入圖片描述
在這裏插入圖片描述
成功!
注意以下幾點 :

  1. 生成代碼後請打開查看一下 避免有的地方報錯 但是idea不顯示 然後重新編譯一下
  2. 注意配置文件中的包名 數據庫賬號密碼和名字是否填寫正確
  3. 修改了配置文件 記得要先提交到碼雲 然後重啓服務
  4. 本項目採用的是RESTful風格 在用postman測試的時候記得選對應的操作

RESTful
面向資源編程,在項目中其他domain就是資源
1)用url來表示資源 /tenantType/1 id爲1租戶類型
2)http請求方式來表示操作
——post 添加
——put修改 或者保存
——delete 刪除
——get 查詢

接口文檔Swagger

導入依賴

<!--引入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>

配置類

package org.leryoo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
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.swagger2.annotations.EnableSwagger2;

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


    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("系統中心api")
                .description("系統中心服務接口文檔說明")
                .contact(new Contact("leryoo", "", "[email protected]"))
                .version("1.0")
                .build();
    }

}

訪問:
http://localhost:2010/swagger-ui.html
得到
在這裏插入圖片描述
成功!


問題

但是這樣有一個問題就是
如果有多個服務的話 我們的前端人員 就要去記憶多個地方這樣顯然是不行得 所以我們就可以在網關中配置多個服務 這樣操作的話網關也需要集成swagger 然後讓網關進行相應的一個轉發

首先 網關zuul也需要導入swagger的一個依賴
上面有我就不再寫了
然後再網關中也需要導入兩個配置文件:
DocumentationConfig.java 配置轉發規則

package org.leryoo.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("系統中心", "/services/sysmanage/v2/api-docs", "2.0"));
        resources.add(swaggerResource("系統管理1", "/services/sysmanage/v2/api-docs", "2.0"));
        resources.add(swaggerResource("系統管理2", "/services/sysmanage/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;
    }
}

SwaggerConfig.java

package org.leryoo.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:8081") //可以寫公司官網
                .contact(new Contact("leryoo", "", "[email protected]"))
                .version("1.0")
                .build();
    }

}

然後通過網關訪問
http://localhost:1030/swagger-ui.html
然後就能得到
在這裏插入圖片描述
說明圖
在這裏插入圖片描述

今日的搭建就到這了 以後我會陸陸續續的介紹其他相關的東西 謝謝大家的觀看

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章