typora-copy-images-to: upload

微服务架构

image-20210807092633688

第一个Spring Boot程序

  • jdk 1.8
  • maven 3.6.1
  • springboot 最新版
  • IDEA

image-20210807100553939

image-20210807100607610

image-20210807100658931

image-20210807100733527

image-20210807101108816

image-20210807101808326

image-20210807102014862

image-20210807102048482

image-20210807111557109

修改端口号、banner

banner在线制作网站

Spring Boot banner在线生成工具,制作下载banner.txt,修改替换banner.txt文字实现自定义,个性化启动banner-bootschool.net

image-20210807115051176

原理

自动配置

pom.xml

  • spring-boot-dependencies:核心依赖在父工程中!
  • 我们在写或者引入SpringBoot依赖的时候不需要指定版本,因为有版本仓库

启动器

  • <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    
  • 启动器:Springboot的启动场景;

  • spring-boot-starter-web,就会自动导入web环境的所有依赖

  • springboot会将所有的功能场景变成一个个启动器

  • 我们要使用什么功能,只需要一个个启动器

主程序

//下面的注解用来标注这是一个springboot的应用
@SpringBootApplication
public class Springboot01HelloworldApplication {

    public static void main(String[] args) {
        //将springboot应用启动
        SpringApplication.run(Springboot01HelloworldApplication.class, args);
    }

}
  • 注解

    • @SpringBootConfiguration :springboot的配置
          @Configuration :spring配置类
          	@Component : spring的一个组件
      
      @EnableAutoConfiguration : 自动配置
          @AutoConfigurationPackage :自动配置包
          	@Import({Registrar.class}):自动配置‘包注册’
          @Import({AutoConfigurationImportSelector.class}):导入选择器
      
    • 自动配置的核心文件

    image-20210808092632439

    • springboot所有的自动配置都是在启动的时候扫描并加载:spring.factories 所有的自动配置类都在这里面,但是不一定生效,要判断条件是否成立,只要导入了对应的start,就有对应的启动器,有了启动器,自动装配就会生效,然后配置成功!
        1. springboot在启动的时候,从类路径下 /META-INF/spring.factories获取指定的值;
        2. 将这些自动配置的类导入容器,自动配置就会生效,帮我们进行自动配置
        3. 以前需要自动配置的东西,现在springboot帮我们做
        4. 整合javaEE,解决方案和自动配置的东西都在spring-boot-autoconfigure:2.5.3这个包下
        5. 它会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器
        6. 容器中也会存在很多的 xxxAutoConfiguration的文件,这些类给容器中导入了这个场景需要的所有组件,并自动配置,@Configuration,JavaConfig!
        7. 有了自动配置类,免去了我们手动编写配置注入功能组件的工作
  • run方法

    • SpringBoot的理解
      • 自动装配
      • run ()

自动装配原理精髓

  1. SpringBoot启动会加载大量的自动配置类
  2. 我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中;
  3. 我们再来看这个自动配置类中到底配置了哪些组件; (只要我们要用的组件存在在其中,我们就不需要再手动配置了)
  4. 给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。 我们只需要在配置文件中指定这些属性的值即可;
    xXxxAutoConfigurartion: 自动配置类;给容器中添加组件
    xxxxProperties: 封装配置文件中相关属性;

SpringBoot配置

image-20210808101121169

删除原来的properties文件,换成application.yaml

SpringBoot使用一个全局的配置文件,配置文件名称是固定的

  • application.properties

    • 语法结构: key = value
  • application.yml

    • 语法结构: key : 空格 value

    • image-20210808101540209

    • #对 空格 的要求十分严格
      #普通的 key - value
      name: chenhao
      
      #对象
      student:
        name: chenhao
        age: 3
      
      #对象的等价行内写法
      student1: {name: chenhao, age: 3}
      
      #数组
      pets:
        - cat
        - pig
        - dog
      
      #数组的行内等价写法
      pets1: [cat, pig, dog]
      
    • yaml 可以给实体类赋值

      • 例子:

      • 新建一个pojo包

      • image-20210808103027419

      • 
        @Component      //把下面的类添加到 spring 组件里面
        public class Dog {
            private String name;
            private Integer age;
        }
        
      • 然后自动生成 构造函数(有参无参),get 和 set方法,还有tostring

      • image-20210808103109112

配置文件的作用∶修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了;

spring传统的内部赋值 原生方式

image-20210808105747458

通过yaml赋值

image-20210808111041676

image-20210808111216240

如何解决?

image-20210808111617445

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

yaml的高级玩法 占位符表达式

image-20210808113315267

学会举一反三将配置文件绑定到 java类上,比如连接数据库的 url 等

传统的 properties文件赋值

image-20210808112621860

yaml 的优点

  • cp只需要写一次即可, value则需要每个字段都添加
  • 松散绑定:这个什么意思呢?比如我的yml中写的last-name,这个和lastName是一样的, -后面跟着的字母默认是大写的。这就是松散绑定
  • JSR303数据校验,这个就是我们可以在字段是增加一层过滤器验证,可以保证数据的合法性
  • 复杂类型封装,yml中可以封装对象,使用@value就不支持

yaml 的相关配置

image-20210810091720816

yaml多套环境配置

image-20210810093634341

也可以把三个文件集合到一个文件内

image-20210810094456860

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐