Spring Cloud 常用的一些注解

EnableZuulServer && @EnableZuulProxy @EnableZuulProxy 理解为 @EnableZuulServer的增强版,当Zuul与Eureka,Ribbon等组件配合使用时,我们使用 @EnableZuulProxy

一. @EnableZuulServer过滤器 1、pre类型过滤器 (1) ServletDetectionFilter:用于检查请求是否通过Spring Dispatcher,检查后通过isDispatcherServletRequest设置布尔值。 (2) FormBodyWrapperFilter:解析表单数据,并为请求重新编码。 (3) DebugFilter:顾名思义,调试用的过滤器,可以通过zuul.debug.request=true,或在请求时,加上debug=true的参数,例如$ZUUL_HOST:ZUUL_PORT/path?debug=true开启该过滤器。这样,该过滤器就会把RequestContext.setDebugRouting()、RequestContext.setDebugRequest()设为true。

2、route类型过滤器 SendForwardFilter:该过滤器使用Servlet RequestDispatcher转发请求,转发位置存储在RequestContext.getCurrentContext().get(“forward.to”)中。可以将路由设置成: zuul: routes: abc:
path: /abc/** url: forward:/abc 然后访问$ZUUL_HOST:ZUUL_PORT/abc,观察该过滤器的执行过程。

3、post类型过滤器 SendResponseFilter:将Zuul所代理的微服务的响应写入当前响应。

4、error类型过滤器 SendErrorFilter:如果RequestContext.getThrowable()不为null,那么默认就会转发到/error,也可以设置error.path属性修改默认的转发路径

二. @EnableZuulProxy过滤器 如果使用注解@EnableZuulProxy,那么除上述过滤器之外,Spring Cloud还会增加以下过滤器:

1、pre类型过滤器 PreDecorationFilter:该过滤器根据提供的RouteLocator确定路由到的地址,以及怎样去路由。该路由器也可为后端请求设置各种代理相关的header。

2、route类型过滤器

(1) RibbonRoutingFilter:该过滤器使用Ribbon,Hystrix和可插拔的HTTP客户端发送请求。serviceId在RequestContext.getCurrentContext().get(“serviceId”)中。该过滤器可使用不同的HTTP客户端,例如 Apache HttpClient:默认的HTTP客户端 SquareupOkHttpClient v3:如需使用该客户端,需保证com.squareup.okhttp3的依赖在classpath中,并设置ribbon.okhttp.enabled = true。 Netflix Ribbon HTTP client:设置ribbon.restclient.enabled = true即可启用该HTTP客户端。需要注意的是,该客户端有一定限制,例如不支持PATCH方法,另外,它有内置的重试机制。

(2) SimpleHostRoutingFilter:该过滤器通过Apache HttpClient向指定的URL发送请求。URL在RequestContext.getRouteHost()中。

springMVC @Controller, @RestController 如果有返回到具体的页面,使用 @Controller,如果要返回string或者json类型的数据,就要使用 @RestController @RestController = @Controller + @ResponseBody , 可以在类注解上使用 @Controller,在具体的额方法上使用 @ResponseBody

@SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan。 @Configuration的注解类标识这个类可以使用Spring IoC容器作为bean定义的来源。@Bean注解告诉Spring,一个带有@Bean的注解方法将返回一个对象,该对象应该被注册为在Spring应用程序上下文中的bean。 @EnableAutoConfiguration:能够自动配置spring的上下文,试图猜测和配置你想要的bean类,通常会自动根据你的类路径和你的bean定义自动配置。 @ComponentScan:会自动扫描指定包下的全部标有@Component的类,并注册成bean,当然包括@Component下的子注解@Service,@Repository,@Controller

@EnableDiscoveryClient, @EnableEurekaClient springCloud的Discovery Service有多种实现:eureka,consul,zookeeper

@EnableDiscoveryClient注解基于spring-cloud-common依赖,并且在classpath中实现
@EnableEurekaClient注解基于spring-cloud-netflix依赖,只能在eureka中使用

如果你的classpath中添加了eureka,则他们的作用是一样的 @EnableEurekaClient: 该注解表明应用既作为eureka实例又为eureka client 可以发现注册的服务 @EnableEurekaServer: 该注解表明应用为eureka服务,有可以联合多个服务作为集群,对外提供服务注册以及发现功能

eureka为netflix开源软件,分为三个部分: eureka服务:用以提供服务注册、发现,已一个war的形式提供 http://search.maven.org/#search%7Cga%7C1%7Ceureka-server 或者编译源码,将war拷贝进tomcat即可提供服务 eureka-server: 相对client端的服务端,为客户端提供服务,通常情况下为一个集群 eureka-client:客户端,通过向eureka服务发现注册的可用的eureka-server,向后端发送请求

@EnableTransactionManagement spring Boot使用事务非常简单,首先使用 @EnableTransactionManagement开启事务支持后,然后在访问数据库的Service方法上添加 @Transactional即可 JPA和JDBC都实现自PlatformTransactionManager spring-boot-starter-jdbc , 框架会默认注入 DataSourceTransactionManager实例 spring-boot-start-jpa, 框架会默认注入 JpaTransactionManager实例

@EnableAsync EnableAsync注解的意思是支持异步执行,就是开启多线程的意思。可以标注在方法,类上 在方法上,需要标注 @Async 异步调用 为了让方法上的 @Async生效,还需要在Spring Boot的主程序中配置 @EnableAsync 注 @Async所修饰的函数,不要定义为static函数,这样异步调用不会生效

@EnableFeignClients Feign是一个声明式的WebService客户端,使用Feign能让编写WebService客户端更加简单 它的使用方法是定义一个接口,然后在接口上添加注解,同时也支持JAX-RS标准的注解, Feign也支持可插拔式的编码器和解码器,Spring Cloud对Feign进行了封装,使其支持 SpringMVC标准注解和HttpMessageConverters.Feign可以和Eureka,Ribbon一起使用,支持负载均衡

@ServletComponentScan 在spring boot中添加自己的Servlet有两种方法,代码注册Servlet和注解自动注册(Filter和Listener也是如此)。

一、代码注册通过ServletRegistrationBean、 FilterRegistrationBean 和 ServletListenerRegistrationBean 获得控制。 也可以通过实现 ServletContextInitializer 接口直接注册。

二、在 SpringBootApplication 上使用@ServletComponentScan 注解后,Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,无需其他代码。

@ApiOperation @ApiOperation不是spring的注解,而是swagger里的 com.wordnik.swagger.annotations.ApiOperation; @ApiOperation 和 @ApiParam为添加API相关的注解,参数说明如下: @ApiOperation(value=“接口说明”,httpMethod=“接口请求方式”,response=“接口返回参数类型”,notes=“接口发布说明”) @ApiParam(required=“是否必须参数”,name=“参数名称”,value=“参数具体描述”)

可能还不是那么齐全吧

发布了40 篇原创文章 · 获赞 53 · 访问量 7696

猜你喜欢

转载自blog.csdn.net/qq_44758351/article/details/104264073