SpringBoot2与响应式编程

环境:
jdk1.8及以上
maven必须3.3+

SpringBoot就是整合Spring生态圈的一站式框架,是简化Spring技术栈的快速开发脚手架

优点

  1. 创建独立Spring应用
  2. 内嵌web服务器
  3. 自动starter依赖,简化构建配置
  4. 自动配置Spring以及第三方功能
  5. 提供生产级别的监控,健康检查及外部化配置
  6. 无代码生成,无需编写XML

缺点

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

分布式的困难

  • 远程调用
  • 服务发现
  • 负载均衡
  • 服务容错
  • 配置管理
  • 服务监控
  • 链路追踪
  • 日志管理
  • 任务调度

云原生上云的困难

  • 服务自愈
  • 弹性伸缩
  • 服务隔离(同一台机器A服务宕机不影响B服务)
  • 自动化部署
  • 灰度发布
  • 流量治理

注解

@Configuration

  • proxyBeanMethods 配置类是否启用代理,默认true;启用代理则@Bean注入的组件为单例

@Import 注入组件,被注入组件使用无参构造器创建
@Conditional*** 条件装配,可用于@Configuration类或@Bean方法
@ImportResource 组件装配引用xml配置类,场景:旧项目迁移的时候有很多xml,直接复用
@ConfigurationProperties(prefix = "***") 配置文件自动注入,可以选择:1)与@Component一起使用;2)不使用@Component,配置类中使用@EnableConfigurationProperties指定开启配置文件注入的类

自动配置原理

@SpringBootApplication

  • 由三个注解组合而成
    • @SpringBootConfiguration(配置类)
    • @ComponentScan(包扫描)
    • @EnableAutoConfiguration(自动配置,下面详解)

@EnableAutoConfiguration

  • 由两个注解组成
    • @AutoConfigurationPackage
    • @Import(AutoConfigurationImportSelector.class)
  • @AutoConfigurationPackage
    • 是一个@Import,其利用AutoConfigurationPackages.Registrar给容器导入一系列组件(及指定包目录下的组件)
  • @Import(AutoConfigurationImportSelector.class)
    • 利用getAutoConfigurationEntry(annotationMetadata);给容器中批量导入一些组件
    • 调用getCandidateConfigurations(annotationMetadata, attributes);获取到所有需要导入到容器的配置类
    • 利用工厂加载Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader)得到所有组件
    • META-INF/spring.factories位置加载一个文件
      • spring-boot-autoconfigure-2.3.4.RELEASE.jar包中的META-INF/spring.factories配置会被读取
      • org.springframework.boot.autoconfigure.EnableAutoConfiguration配置项为自动配置类
      • 通过一系列@Conditional***实现按需装配
      • @EnableConfigurationProperties(xxx.class)修饰的@Bean方法参数中加上xxx类型的参数,SpringBoot会读取配置文件实现定制化Bean

最佳实践

  • 引入场景依赖
  • 查看自动配置类哪些
    • 自己分析,引入场景对应的自动配置一般都生效了
    • 配置文件中的debug=true开启自动配置报告,Negative(不生效)/Positive(生效)
  • 是否需要修改
    • 参照文档修改配置项
  • 引入开发工具,实现热更新(实际上是重启,JRebel能实现真正的热更新,但是收费)
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>
  • IDEA中自定义配置文件自动提示,需要引入依赖,并且建议在打包插件中排除该依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.3.4.RELEASE</version>
            <configuration>
                <excludes>
                    <exclude>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-configuration-processor</artifactId>
                    </exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>

yaml中单引号字符串会不转义,双引号字符串会转义,如:'\n'输出为\n,"\n"输出为换行

Spring支持两种web开发模式

  • 原生Servlet SpringMVC
  • 响应式编程WebFlux
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值