前言:
前面我們已經搭建了一個基礎模塊 今天我們就來做進一步的開發
今日任務:
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測試一下分頁查詢
新增
修改
刪除
成功!
注意以下幾點 :
- 生成代碼後請打開查看一下 避免有的地方報錯 但是idea不顯示 然後重新編譯一下
- 注意配置文件中的包名 數據庫賬號密碼和名字是否填寫正確
- 修改了配置文件 記得要先提交到碼雲 然後重啓服務
- 本項目採用的是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
然後就能得到
說明圖
今日的搭建就到這了 以後我會陸陸續續的介紹其他相關的東西 謝謝大家的觀看