# AlaskaGulf **Repository Path**: hermit1997_admin/AlaskaGulf ## Basic Information - **Project Name**: AlaskaGulf - **Description**: 用Spring Cloud Alibaba搭建的一个简单的框架,供学习使用 Spring Cloud项目创建 Spring Boot项目创建 Nacos 注册中心 微服务之间通讯 openFeign Gateway 路由分发 mybatis-plus 数据库 Knife4j 文档管理 - **Primary Language**: Java - **License**: AFL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-05-26 - **Last Updated**: 2022-05-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

AlaskaGulf logo

AlaskaGulf - 简易Spring Cloud框架

spring-boot-plus version spring-boot-plus version spring-boot-plus version spring-boot-plus version spring-boot-plus version spring boot version spring-boot-plus version

#### 介绍 用Spring Cloud Alibaba搭建的一个简单的框架,供学习使用 #### 概述 - Spring Cloud项目创建 - Spring Boot项目创建 - Nacos 注册中心 - 微服务之间通讯 openFeign - Gateway 路由分发 - mybatis-plus 数据库 - Knife4j 文档管理 #### 详细 ##### 创建父工程 1. 编写pom文件,引入所需依赖 > 子模块继承之后,提供作用:锁定版本+子modlue不用写groupId和version > 理解:dependencyManagement元素提供一个管理依赖版本号的方式 > 好处:1.如果多个子项目引用同一个依赖,则可以避免在每一个子项目中都声明一个版本号 2.升级或切换到另一个版本只需要在父容器中更新 3.如果子项目单独需要另一个版本,只需要声明version即可 > 区别:dependencyManagement只是声明依赖,并不实现引入,因此子项目需要显式的声明所需要的依赖 2. 删除.mvn src .gitignore HELP.md mvnw mvnw.cmd ##### 创建springBoot微服务 > 本项目拥有provider微服务与custom微服务 1. 编写pom引入所需依赖 com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.boot spring-boot-starter-web 2. 编写运行入口 > @SpringBootApplication // 运行入口 3. 编写配置文件 server: port: 8080 #端口 spring: application: name: provider-server #服务名称 ##### Nacos 注册中心 > 下载解压nacos,并且运行nacos后 1. pom中引入nacos依赖 com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery 2. 运行类添加注解 > @EnableDiscoveryClient // 注册到nacos服务中心 3. 配置文件 cloud: nacos: discovery: server-addr: 127.0.0.1:8848 #nacos的服务注册中心地址 3. 打开本地nacos控台查看微服务是否注册到注册中心 http://127.0.0.1:8848/nacos/index.html ##### 微服务之间通讯 - 服务之间通讯 1. 引入依赖 org.springframework.cloud spring-cloud-starter-openfeign 2.2.5.RELEASE 2. 运行类添加 @EnableFeignClients 3. 接口添加注解 @FeignClient > 例: @FeignClient(url = "微服务ip : 端口", name = "微服务名称", fallbackFactory = 熔断器类) > name、value: 对应yml文件中spring.application.name > fallbackFactory: 降级 当服务器宕机时返回给页面的异常处理 > url: 微服务ip+端口 > 此处出现了一点点小问题,按道理指定微服务在nacos中注册的名称即可找到被调微服务,无需指定微服务ip+port,但是我的项目不指定ip情况下,报负载均衡错误,指定熔断后直接跳转熔断方法。。。。。。目前不影响运行,但存在瑕疵 - 添加熔断 1. 引入依赖 com.alibaba.cloud spring-cloud-starter-alibaba-sentinel com.fasterxml.jackson.dataformat jackson-dataformat-xml 2. 添加熔断配置 feign: sentinel: enabled: true # 开启熔断器开关 3. 编写熔断方法继承原接口类,添加注解 > @Component > @Slf4j > ##### 路由分发 1. 新建微服务引入gateway依赖 org.springframework.cloud spring-cloud-starter-gateway 2.2.1.RELEASE 2. 编写配置文件 gateway: routes: # 路由数组【路由指当请求满足什么条件的时候转到哪个微服务】 - id: provider-server # 当前路由的标识,要求唯一, 可以随便写 uri: lb://provider-server # lb指的是从nacos中按照名称获取微服务,并遵循负载均衡策略 predicates: # 断言:路由转发需要满足的条件 - Path=/provider/** # 当请求满足path指定的规则时,才进行路由转发 filters: # 过滤器:请求在传递过程中可以通过过滤器对其进行一定的修改 - StripPrefix=1 # 转发之前去掉一层路径 3. 编写运行主方法,项目成功运行后就可以用路由配置的端口+配置的path去调微服务的接口了 ##### 集成mybatis-plus 1. 引入依赖 mysql mysql-connector-java org.mybatis.spring.boot mybatis-spring-boot-starter com.baomidou mybatis-plus-boot-starter 2. 运行入口添加扫描mapper注解:`@MapperScan("mapper")` 3. 编写配置文件 datasource: url: jdbc:mysql://127.0.0.1:3306/alaska_gulf?useSSL=false # 数据库路径 username: root # 数据库账号 password: root # 数据库密码 driver-class-name: com.mysql.jdbc.Driver # 数据库驱动类 mybatis-plus: mapper-locations: classpath:mapper/*.xml # mapper路径 type-aliases-package: com.hermit.alaskagulfcustom.entity configuration: map-underscore-to-camel-case: true 4. 本项目中使用到了mybatis-plus的分页(如不需要自行绕过) 添加mybatis-plus配置类 @EnableTransactionManagement @Configuration public class MybatisPlusConfig { /** * 开启mybatis-plus分页功能 * @return */ @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } } 5. 业务代码编写(不要遗忘以下注解) - 控制层:`@Controller` 有返回值情况: `@ResponseBody` - 服务层:`@Service` - Dao层: `@Mapper` ##### Knife4j 文档管理 1. 引入依赖 com.github.xiaoymin knife4j-spring-boot-starter 2.0.8 javax.validation validation-api 1.1.0.Final 2. 编写Knife4j配置类 @Configuration @EnableSwagger2WebMvc @EnableKnife4j @Import(BeanValidatorPluginsConfiguration.class) public class SwaggerConfiguration { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) // 选择swagger2版本 .apiInfo(apiInfo()) //定义api文档汇总信息 .select() .apis(RequestHandlerSelectors .basePackage("com.dave.controller")) // 指定生成api文档的包 .paths(PathSelectors.any()) // 指定所有路径 .build(); } /** * 构建文档api信息 * @return */ private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("文档标题") // 文档标题 .contact(new Contact("name", "url", "mail")) //联系人信息 .description("描述") //描述 .version("0.1") //文档版本号 .termsOfServiceUrl("http://localhost:8083") //网站地址 .build(); } } 3. 配置路由,注册微服务到nacos略 4. knife4j注解示例详见:AlaskaGulf\alaska-gulf-knife4j #### 仍需完善,如有不足,感谢指出