微服务架构与SpringBoot

182 阅读3分钟

一、架构演变

单体架构 -> 集群架构 -> 垂直化 -> 服务化(SOA) -> 微服务

微服务特点:

  • 分布性
  • 远程通信
  • 服务注册中心

二、什么是spring cloud?

  • spring cloud生态:提供了快速构建微服务技术组件
  • 创建spring boot应用的时候会自动给出可选的版本,开发者无需关心版本信息

1. 第三方组件Netflix

  • eureka
  • hystrix
  • ribbon
  • feign

2. 阿里巴巴组件

  • nacos
  • sentinel
  • seata
  • roketmq
  • dubbo

3. spring cloud Hoxton(bom)

bom清单,记录所以组件版本号

4.spring boot与spring cloud的关系

  • 版本兼容性有对应关系

三、spring boot前世今生

  • Spring Framework(Spring框架) AOP、IOC/DI
  • 万能胶
  • 如何配置进行轻量化

思考:用springmvc去构建一个web项目

  • 创建一个项目结构(maven/gradle)
  • spring的依赖,spring mvc、servlet api的依赖
  • web.xml,DispatcherServlet
  • 启动一个Spring mvc配置,Deispatcher-servlet.xml,<context:component-scan=""/>,<mvc:annotation-driven/>
  • 创建一个Controller 发布一个http请求
  • 发布到jsp/servlet容器

通用模板,脚手架工程

Spring的产生

  • 2012
  • 2013:2014发布1.0版本

到底什么是Spring Boot

  • 约定优于配置理念下的一个产物
  • 只依赖spring-boot-starter-web的jar
  • Spring Framework的脚手架

四、约定优于配置

  • ComponentScan("com.xxx.xxx") 智能扫描Spring 的注解
  • MapperScan("com.xx.xxx") 扫描mybatis注解

五、spring boot如何应用,集成MyBatis

  1. application.properties配置数据源
  2. entity
  3. mapper
  4. mapper.xml (可以MyBatis在线生成器工具)
  • spring boot扫描特性,默认扫描当前类以及同级目录和子目录的注解
  • @ComponentScan("com.xxx.controller"):扫描Spring的注解
  • @MapperScan("com.xxx.dao.mappers):扫描mybatis注解@Mapper

六、spring boot和微服务

  1. 所以微服务组件,都集成在spring boot之上
  2. spring cloud版本的时候,他和spring boot版本兼容性
  3. Spring boot是微服务应用的基础框架

七、spring boot的特性

  • EnableAutoConfiguration (自动装配)
  • Starter (启动依赖) ,依赖自动装配的技术
  • Actuator (监控),提供了一些endpoint,http、jmx形式去访问,health信息。metrics信息。。。
  • Spring Boot CLI(命令行操作的功能,groovy脚本)客户端groovy

八、spring注解驱动发展过程

Spring Framework的注解驱动的发展历史

Spring 1.x

IOC的功能,配置重量级,难维护 <bean name="helloService" class="com.xxx.service.IHelloService" />

image.png

Spring2.x阶段

@Required/@Repository(Dao)/@Aspect

spring 2.5

  • @Component
  • @Service
  • @Controller
  • @RequestMapping 配置文件增加扫描配置即可,不需要配置每个类<context:component-scan base-package="com.xxx.service" />

spring 3.x版本

  • @Configuration去xml化@ComponentScan取代标签<context:component-scan base-package="com.xxx.service" />

核心目的是:把bean对象如何更加便捷的方式加载到Spring IOC容器中

方式一 @Service、@ComponentScan、AnnotationConfigApplicationContext.class

  1. @Service:定义被Spring托管
  2. @ComponentScan:负责扫描@Service/@Repository/@Controller等去xml化
  3. AnnotationConfigApplicationContext.class:上下文获取托管的类

image.png

image.png 测试

image.png

方式二 @Configuration、@Bean、AnnotationConfigApplicationContext.class

  1. @Configuration:配置类声明
  2. @Bean:要托管到IOC容器类声明
  3. AnnotationConfigApplicationContext.class:上下文获取托管的类 image.png image.png image.png

多个@Configuration配置如何加载

1. 不灵活的多配置文件加载

image.png image.png

2. 灵活加载@Import()

image.png image.png

Enable驱动模块

image.png

Spring3.x版本中,集成Redis或者mybatis

  • 创建一个配置类
  • @bean注解来声明一个bean
@Bean
DefaultKaptcha defaultKaptcha() {

}
  • @Enable启动一个模块,把相关组件的bean自动装配到IOC容器中

image.png

  1. xml方式 image.png image.png image.png
  2. 注解方式

image.png image.png image.png