一、SpringBoot 与 SpringMVC 的区别?
SpringMVC是基于Spring的MVC框架,
而Spring Boot是基于Spring配置的开发工具框架,使用注解更加简洁和适应快速开发。
二、SpringBoot的启动机制?
从代码上看,调用了SpringApplication的静态方法run,这个run方法会构造一个SpringApplication的实例,然后再调用这里实例的run方法就表示启动SpringBoot.
具体的实例流程:
- 构造SpringApplication的实例
- 调用SpringApplication.run()方法
构造SpringApplicationRunListeners实例
发布ApplicationStartedEvent事件
SpringApplicationRunListeners实例准备环境信息
创建ApplicationContext对象
ApplicationContext实例准备环境信息
刷新的上下文
最重要的注解:
- @Configuration(@SpringBootConfiguration点开查看发现里面还是应用了@Configuration)
- @EnableAutoConfiguration
- @ComponentScan
每次写这3个比较累,所以写一个@SpringBootApplication方便点。
三、 基于继承SpringBoot 的拦截器实现异常拦截?
继承springboot的RuntimeException拦截器创建的异常拦截,定义全局异常拦截器:继承自RuntimeException,在业务代码中专注处理业务,而不是返回各种CodeMsg(比如这里只需要知道登录时成功还是失败,其余情况直接抛出异常),可以直接抛出异常,添加一个全局异常类,根据CodeMsg来生成异常, 交由GlobalExceptionHandler全局异常处理器处理(在其中增加if条件分支即可)
登录拦截是通过实现HandlerInterceptor 拦截器达到的拦截URL请求
四、SpringBoot在实际项目中的作用是什么?(开启事务管理)
Spring Boot 通过一个自动配置和启动的项来解决Spring或SpringMVC中配置大量参数问题。为了更快的构建产品就绪应用程序,Spring Boot 提供了一些非功能性特征。同时他也是应用的主入口类,并且提供事务管理的功能(在Springboot中添加@EnableTransactionManagement注解,在对应的service方法上添加@Transactional注解便可启动事务)。
五、SpringCloud是怎么进行限流的?
Hystrix使用线程池隔离,超过线程池的负载,走熔断的逻辑。在一般应用服务器中,比如tomcat容器也是通过限制它的线程数来控制并发的;也有通过时间窗口的平均速度来控制流量。常见的限流纬度有比如通过Ip来限流、通过uri来限流、通过用户访问频次来限流。
SpringCloud Gateway限流
六、关于SpringCloud 中服务熔断、服务雪崩、服务监视?
服务熔断:
当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回“错误”的响应信息。一般是某个服务故障或异常引起,类似保险丝,当某个异常条件被触发,直接熔断整个服务,而不是一直等到服务超时。发生在服务端
服务降级:
通过切面的方式,在客户端实现服务熔断的效果。一般是从整体负荷考虑。当某个服务熔断后,服务器不可以被调用,此时客户端可以自己准备一个本地的Fallback回调,返回一个缺省值。这样做,虽然服务水平下降,但好歹可以使用,比直接挂掉要好。
服务雪崩效应:
是一种因“服务提供者的不可用”(原因)导致“服务调用者不可用”(结果),并将不可用逐渐放大的现象。