12月7日入职
12.7
入职,了解公司使用的技术框架,了解Spring Cloud Alibaba
12.8
学习Nacos
nacos服务端的下载与安装:nacos下载地址
下载解压后有cmd和sh两种后缀的文件,分别用于windows和linux系统的安装,根据自己的需要进行安装对Nacos的理解:spring cloud中的一个组件,主要用于配置管理及服务管理
使用:引入依赖后编写配置文件,将要管理的配置上传到nacos
依赖:
<!-- SpringCloud Ailibaba Nacos--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!-- SpringCloud Ailibaba Nacos Config--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
Nacos配置:(bootstrap.yml)
# Tomcat server: port: 9006 # Spring spring: application: # 应用名称 name: spring-cloud-nsfocus profiles: # 环境配置 active: dev main: allow-bean-definition-overriding: true cloud: nacos: discovery: # 服务注册地址 server-addr: 192.168.20.203:8848 #dev1 namespace: 59e55ffc-0656-40d3-a61f-6fed3630d9ec # dev2 # namespace: 519138e4-ce8b-4434-ac56-1273aabc20f3 config: # 配置中心地址 server-addr: 192.168.20.203:8848 # 配置文件格式 file-extension: yaml # 共享配置 file-extension: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
说明:
nacos
的配置下主要分为discovery
和config
两个部分,discovery
配置的地址用于指定将服务注册到哪里,namespace
用于和nacos管理面板的命名空间绑定以区分相同服务名的不同应用。config
部分配置的地址是指定要读取的配置文件所在的服务器地址,file-extension
用于指定配置文件的扩展名,file-extension
用于详细指定要读取的配置文件的名称,其中的application是一个关键字,最后解析出来是此应用的名称,则根据拼接规则,此处要读取的配置文件名应为:spring-cloud-nsfocus-dev.yaml
12.9
学习gateway
gateway作为微服务的网关,起到了一个路由功能,同时能对请求做出过滤等操作
使用:引入依赖,编写配置
依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency>
配置文件:
spring: cloud: gateway: enabled: true discovery: locator: enabled: true lower-case-service-id: true routes: - id: spring-cloud-fxdemo-product uri: lb://spring-cloud-fxdemo-product predicates: - Path=/product/** filters: - StripPrefix=1 - id: spring-cloud-fxdemo-order uri: lb://spring-cloud-fxdemo-order predicates: - Path=/order/** filters: - StripPrefix=1
配置中的一些解释:
id
是要路由到的微服务的application.name
uri
predicates
是断言,即判断下方配置的Path
(请求路径)是由/order
开头的,则满足规则,路由转发请求到名为id
(spring-cloud-fxdemo-product)的微服务下,转发时根据过滤器filters
配置的规则对转发的路径作处理,StripPrefix
=1是截取掉第一级前缀,如 /product/p/getByID 截取后转发的请求为 /p/getByID遇到的问题
配置完成后,各个微服务模块可以正常访问,但是通过gateway来访问其它模块时404
解决:在nacos配置管理中心,我没有将配置文件上传到默认的public空间,而是上传到了自己定义了一个fxdemo空间,而在本地bootstrap.yaml配置文件中nacous的config属性下没有指定namespace命名空间,此时默认去public空间找配置文件,故没有找到相应的配置文件导致没有路由的配置,故在config下配置namespace(要和配置文件所在的命名相同)即可解决。同理,不修改本地的配置文件的情况下,将nacos配置管理中心的配置文件移动到public空间也可以解决
12.10
学习使用openFeign
openFeign用于微服务之间相互调用,使用简单,只需要引入依赖,并添加一些注解即可
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
使用:
首先在要引入openFeign的微服务的启动类上添加注解@EnableFeignClients
然后创建一个接口,接口使用@FeignClient
注解,在这个注解中需要指定要调用的微服务的name,例如要调用的微服务的name为spring-cloud-fxdemo-order
则注解应为@FeignClient(value = "spring-cloud-fxdemo-order")或@FeignClient(name = "spring-cloud-fxdemo-order"),可以看出使用value或name来指定都是可以的。此外,@FeignClient
注解中还有两个常用属性,contextId
和fallbackFactory
,contextId
用于指定一个id,作一个标识符,contextId在Feign Client的作用是在注册Feign Client Configuration的时候需要一个名称,名称是通过getClientName方法获取的:,但是目标服务是同一个;fallbackFactory
指定一个类来处理接口请求数据异常时的处理,这个类继承了接口并实现了其中的方法。
完成接口的注解后,只需要在接口中定义一些方法,并在方法上使用@RequestMapping
注解来指定要调用的微服务的接口uri,例如,我要调用spring-cloud-fxdemo-order模块中的/order/getOrder
接口,则应在方法上添加注解:
@RequestMapping("/getOrder")
最终这个接口应该为:
@FeignClient(value = "spring-cloud-fxdemo-order")
public interface OrderFeign {
@RequestMapping("/order/getOrder")
Order getOrder();//有参数的就写参数
}
至此,配置完成,使用只需要在要用的地方将这个接口自动装配后调用方法即可。
12.10
学习Swagger2
Swagger用于自动生成、描述、调用和可视化RESTful风格的Web服务
引入maven依赖,在接口上添加注解,编写配置类后即可使用
maven依赖
<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>
配置类:
@Configuration
public class Swagger2Configration {
@Bean
public Docket createRestApi(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.example.demoproduct"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo(){
return new ApiInfoBuilder()
.title("接口文档")
.description("文档描述")
.termsOfServiceUrl("https://www.bilibili.com/video/av43402234/")
.version("1.0.0")
.build();
}
}
为方便管理配置类中的属性,可以将这些属性放到配置文件中,用nacos来管理。
注解:
@Api
:修饰整个类,描述 Controller 的作用@ApiOperation
:描述一个类的一个方法,或者说一个接口@ApiParam
:单个参数描述
12.11
Oauth2权限管理
Ribbon负载均衡策略
RBAC(Role-Based Access Control基于角色的访问控制)
JWT
12.15
新建rule实体类,编写接口,使用http请求抓取sonarqube的漏洞扫描规则装入服务器数据库
12.16
- 规则分页查询
- 添加标签(sonarqube和数据库均改变)
- 删除规则
- 查询规则详细信息