- SpringBoot
- 1.SpringBoot、SpringMVC、Spring的区别
Spring主要完成的是IOC和AOP的功能。
SpringMVC是通过DispatcherServelet,ModelAndView 和 ViewResolver等使开发Web应用变得很简单了。
SpringBoot能够更快的构建产品,拥有快速开发整合包。Spring 和 SpringMVC需要大量的配置,Spring Boot 通过一个自动配置,可以通过main方法启动,内置了tomcat,打成jar包直接可以运行,不需要配置web.xml。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
- 2.SpringBoot自动装配
Spring Boot 提供了配置应用程序和框架所需要的基本配置。启动类用@SpringBootApplication注解,@SpringBootApplication 所包含的子注解@EnableAutoConfiguration完成了自动装配的功能。其不仅加载并装配了 META-INF/spring.factories
中的自动配置相关类,还完成了自定义类的加载与装配。
- 3.SpringBoot怎么完成多环境切换
配置文件application.yml、application-dev.yml、application-pro.yml、application-test.yml
在application.yml中定义spring.profiles.active=dev。
spring:
profiles:
active: dev #开发环境
- 4.SpringBoot的自定义异常处理页面
统一异常处理,如404错误,只需要定义一个/resources/public/error/404.html页面即可,无需其他配置和代码编写。
- 5.SpringBoot中js放置在哪里
resources\static\js目录下
- 6.SpringBoot项目能否用war包发布
能。
- 7.SpringBoot常用注解
@SpringBootApplication是一个复合注解,里面有@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan注解。
@SpringBootConfiguration:标注当前类是配置类,这个注解继承自@Configuration。并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。
@EnableAutoConfiguration:是自动配置的注解,这个注解会根据我们添加的组件jar来完成一些默认配置。
@ComponentScan:扫描当前包及其子包下被@Component,@Controller,@Service,@Repository注解标记的类并纳入到spring容器中进行管理。等价于<context:component-scan>的xml配置文件中的配置项。
@ServletComponentScan:Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,这样通过注解servlet ,拦截器,监听器的功能而无需其他配置,。
@MapperScan:spring-boot支持mybatis组件的一个注解,通过此注解指定mybatis接口类的路径,即可完成对mybatis接口的扫描。
来源
- SpringCloud
- 1.什么是SpringCloud
SpringCloud是基于SpringBoot的微服务系统架构的一站式解决方案。SpringBoot为SpringCloud提供了代码实现环境,使用SpringBoot将其他组件有机融合到SpingCloud中。
- 2.SpringCloud常用组件
微服务注册中心Eureka
OpenFeign与Ribbon
Hystrix服务熔断与服务降级
微服务网关Zuul
分布式配置管理Spring Cloud Config
调用链跟踪Spring Cloud Sleuth+zipkin
消息系统整合框架Spring Cloud Stream
- 3.如何实现服务注册Enreka
创建Euraka服务中心:
(1)添加Eureka Server依赖。
(2)在配置文件中配置Eureka Server。
(3)在启动类上添加@EnableEurekaServer注解,启动EurekaServer功能。
创建提供者工程步骤:
(1)添加EurekaClient依赖。
(2)在配置文件中指定要注册的Eureka Server地址,指定自己的微服务名称。
创建消费者工程步骤:
(1)添加EurekaClient依赖。
(2)在配置文件中指定要注册的Eureka Server地址,指定自己的微服务名称。
(3)在JavaConfig类中为RestTemplate添加@LoadBalance注解,实现负载均衡。
(4)处理器中,消费者在调用服务端微服务URL时,使用提供者名称,不使用主机名:端口。
Eurake集群:
提供多个Euraka服务中心,配置文件中用多个逗号分隔配置service-url。
eureka:
client:
register-with-eureka: false # 不把自己注册到eureka上
fetch-registry: false # 不从eureka上来获取服务的注册信息--不检索服务
service-url:
defaultZone: http://localhost:8000/eureka/,http://localhost:8001/eureka/ # 服务URL
instance:
hostname: eureka-server # eureka实例的主机名
- 4.Eurake自我保护机制
自我保护的阈值因子默认是0.85,也就是说EurekaServer收到的心跳数小于应收数的85%时,会启动自我保护机制,这是为了保证系统的可用性(AP),那些由于网络抖动而被理解为宕机的客户端有复活的机会,且服务列表只能读写,禁止删除;只能等到恢复到阈值以上,才能推出自我保护模式。
- 5.服务离线:服务下架和服务下线
服务注册于服务下线是基于Actuator监控终端实现的。
服务下架:将注册的Eureka Client从Service的注册表中移除,使其他Client无法发现它。
服务下线:Eureka Client在注册表中,但修改了服务状态(UP),使其虽然可以被其他Client发现,但无法被其他Client调用。
- 6.Feign客户端
OpenFeign可以将提供者提供的Restful服务伪装为接口进行消费,消费者只需使用“Feign 接口 + 注解”的方式即可直接调用提供者提供的 Restful 服务,而无需再使用 RestTemplate。使用的代理实现的。
Feign是一个伪客户端,不对请求做任何处理,是通过注解实现的restful请求服务。消费者是调用伪装的Feign接口,使用“Feign 接口 + 注解”方式调用。
Ribbon是客户端负载均衡器。运行在消费端。
创建消费者工程:
(1)添加 OpenFeign 依赖。
(2)定义 Feign 接口,使用@FeignClient注解,指定要访问的微服务。
(3)使用 Feign 接口来消费微服务,Feign接口不需要实现类,不需要使用的 RestTemplate。
(4)在启动类上添加@EnableFeignClients
Feign 连接提供者、对于提供者的调用均可设置超时时限,在配置文件中配置即可。
Feign 支持对请求(Feign 客户端向提供者的请求)和响应(Feign 客户端向客户端浏览器的响应)进行 Gzip 压缩以提高通信效率。
- 7.Ribbon
负载均衡策略:
(1)RoundRobinRule轮询策略:默认策略,若最多轮询10次,如果还是找不到可用的provider,则返回 null。
(2)RandomRule随机策略:从provider提供方随机抽取一个。
(3)RetryRule重试策略:按轮询策略获取提供方,没找到,则在指定时间内重试,默认是500ms。
(4)BestAvailableRule最可用策略:选择连接的消费者最少的策略。
(5)AvailabilityFilteringRule可用过滤:过滤掉熔断和超连接限制的提供方,其他同轮询策略。
(6)ZoneAvoidanceRule回避策略:根据提供方所在的zone和可用性,对提供方进行选择。
(7)WeightedResponseTimeRule权重响应时间策略:权重越大,被访问可能性越大,权重根据平均响应时间来计算。由于刚开始不知道,就先使用轮询策略,后面就可根据权重了。
(8)自定义负载均衡策略。
- 8.Hystrix
服务雪崩
在A依赖B,B依赖C,C依赖D等很长的调用链路中,A在调用过程中,中间某一段出了问题(不可用或者处理时间过长),而这时随着服务请求数越来越多,则会导致占用系统的线程或IO过重,导致系统出现瓶颈;进而影响其他的请求也不可用,这时可能就会业务系统崩溃,这种现象就是雪崩效应。
服务熔断
服务熔断是解决服务雪崩的方案。可分为预熔断和即时熔断。
预熔断:在服务高峰,通过服务治理的方式预先将暂时不太重要的的服务停止或延迟。
即时熔断:消费者在访问提供者失败数达到一定的阈值时,就将服务停掉。
Hystrix相当于一个开关。消费者端安装有 Hystrix 熔断器,当 Hystrix 监控到某个服务发生故障后熔断器会开启,将此服务访问链路断开。
Hystrix 对于服务降级的实现方式有两种:fallbackMethod方法级别的服务降级、 fallbackFactory类级别的服务降级,方法级别优先级别高。
服务降级是为了预防响应慢负载过重,而暂时关闭一些不太重要的接口或请求,直接返回一个错误处理信息。
- 9.Zuul
- 9.Gateway
- 10.SpringCloud原理
- 11.SpringCloud常用注解
@Mapper: 注解写在你的Mapper映射接口上面
@SpringBootApplication: 写在主程序上面
@Configuration: 写在配置类上面
@Bean: 写在配置类中的返回新的对象的方法上面
@EnableEurekaServer: 把当前微服务标记为Eureka注册中心接收其他微服务的注册
@EnableEurekaClient: 注册该微服务到Eureka中
@LoadBalanced: 该注解写在配置RestTemplate的配置类方法上来启动ribbon负载均衡
@EnableFeignClients: 写在主程序上来支持feign
@HystrixCommand(fallbackMethod=“你的方法”) :方法级别的服务降级
@EnableCircuitBreaker : 启用对Hystrix熔断机制的支持
@FeignClient(value="服务名",fallbackFactory=实现FallbackFactory的类.class): 实现服务降级
@EnableHystrixDashboard: 加在主程序上启动服务监控
@FeignClient(value=“服务名”): 写在接口上来调用远程服务
@EnableZuulProxy: 写在主程序上启动zuul路由访问功能