SpringBoot01

SpringBoot优点

  • 创建独立Spring应用。
  • 内嵌web服务器,默认使用Tomcat。
  • 自动starter依赖,简化构建配置,后面会具体讲解。
    ...

SpringBoot缺点

  • 人称版本帝,迭代快,需要时刻关注变化
  • 封装太深,内部原理复杂,不容易精通

微服务

  • 微服务是一种架构风格
  • 一个应用拆分为一组小型服务
  • 每个服务运行在自己的进程内,也就是可独立部署和升级
  • 服务之间使用轻量级HTTP交互
  • 服务围绕业务功能拆分
  • 可以由全自动部署机制独立部署
  • 去中心化,服务自治。服务可以使用不同的语言、不同的存储技术

分布式的困难

  • 远程调用,一般使用http通信。
  • 服务发现,就是看哪些服务是可用的。
  • 负载均衡,让多台服务器动起来
  • 服务容错,各种错误情况下的处理方式
  • 配置管理,配置中心,修改配置让服务们自己同步
  • 服务监控,多个服务以及云平台的资源消耗和健康状况
  • 链路追踪,一个复杂的业务流程可能需要连续调用多个微服务,我们需要记录一个完整业务逻辑涉及的每一个微服务的运行状态,再通过可视化链路图展现,帮助软件工程师在系统出错时分析解决问题,常见的解决方案有Zipkin,SkyWalking
  • 日志管理,微服务架构默认将应用日志分散保存在每一个微服务节点上,当系统进行用户行为分析、数据统计时必须收集所有节点日志数据,非常不方便。这时候我们需要一个独立的日志平台,收集所有节点的日志数据并可方便对其进行汇总分析,常见的解决方案有ELK,EFK。
  • 任务调度

自动配置原理

1 、依赖管理

  • 父项目做依赖管理
  • 开发导入starter场景启动器
  • 无需关注版本号,自动版本仲裁
  • 可以修改默认版本号

2、自动配置

  • 自动配好Tomcat
    • 引入Tomcat依赖。
    • 配置Tomcat
  • 自动配好Web常见功能,如:字符编码问题
    • SpringBoot帮我们配置好了所有web开发的常见场景
  • 默认的包结构
    • 主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来
    • 无需以前的包扫描配置
    • 想要改变扫描路径,@SpringBootApplication(scanBasePackages="com.atguigu")
      • 或者@ComponentScan 指定扫描路径
  • 各种配置拥有默认值
    • 默认配置最终都是映射到某个类上,如:MultipartProperties
    • 配置文件的值最终会绑定每个类上,这个类会在容器中创建对象
  • 按需加载所有自动配置项
    • 非常多的starter
    • 引入了哪些场景这个场景的自动配置才会开启
    • SpringBoot所有的自动配置功能都在 spring-boot-autoconfigure 包里面

3、组件添加

  • 基本使用
  • Full模式与Lite模式
    • 示例
    • 最佳实战
    • 配置 类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断
    • 配置类组件之间有依赖关系,方法会被调用得到之前单实例组件,用Full模式
@Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件
1、配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的
2、配置类本身也是组件
3、proxyBeanMethods:代理bean的方法
    Full(proxyBeanMethods = true)、【保证每个@Bean方法被调用多少次返回的组件都是单实例的】
    Lite(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】
    组件依赖必须使用Full模式默认。其他默认是否Lite模式
@Bean、@Component、@Controller、@Service、@Repository
  1. @controller 控制器(注入服务)用于标注控制层,相当于struts中的action层
  2. @service 服务(注入dao)用于标注服务层,主要用来进行业务的逻辑处理
  3. @repository(实现dao访问)用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件.
  4. @component (把普通pojo实例化到spring容器中,相当于配置文件中的 )泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。
@ComponentScan、@Import
  • @Import({User.class, DBHelper.class}) 给容器中自动创建出这两个类型的组件、默认组件的名字就是全类名
@Conditional

条件装配:满足Conditional指定的条件,则进行组件注入

原生配置文件引入 @ImportResource
posted @ 2021-07-16 18:25  我等着你  阅读(43)  评论(0编辑  收藏  举报