• 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路由访问功能