SpringBoot

 学自: 【狂神说Java】SpringBoot最新教程IDEA版通俗易懂_哔哩哔哩_bilibili


学习框架


一、架构背景及演变

image

1.1单一应用架构(all in one)

    将所有功能都部署在一起,以减少部署节点和成本。

    用于简化增删改查工作量的数据访问框架(ORM)是关键。

单一架构微服务架构
模块全都耦合在一块,代码量大,维护困难。每个模块就相当于一个单独的项目,代码量明显减少,遇到问题也相对来说比较好解决。
模块都共用一个数据库,存储方式比较单一。每个模块都可以使用不同的存储方式(比如有的用redis,有的用mysql等),数据库也是单个模块对应自己的数据库。
模块开发所使用的技术一样。微服务每个模块都可以使用不同的开发技术,开发模式更灵活。

1.2垂直应用架构(MVC)

  单一应用增加机器带来的加速度越来越小,提升效率的方法之一是将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。

1.3分布式服务架构(RPC)

    将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

1.4垂直应用架构(SOA)

    当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。


二、第一个SpringBoot程序

2.1 新建springboot项目

·spring官网>>springboot>>quickstart https://start.spring.io/

 ·下载解压用IDEA打开

或者

IDEA新建项目(一般开发都这样创建)

 (spring   https://start.spring.io/加载不了可以用阿里云https://start.aliyun.com/

 核心配置文件:(后面介绍yaml)

主应用:

简单接口:自动装配,原理见后文(只用写一个Controller,省去了很多配置)

通过package打包jar包,成功后保存在target中

在文件夹powershell打开,即可直接运行(文件夹shift+右键)

 

 修改端口号:

 小彩蛋:修改banner

2.2 自动配置原理:

 1.pom.xml

·依赖

spring-boot-dependencies核心依赖在父工程中(按下图路径进入)

pom.xml中的

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

spring-boot-starter-parent中的

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.6.2</version>
  </parent>

spring-boot-dependencies中的
 
<groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-dependencies</artifactId>

我们在引入依赖时不需要指定版本,就是因为有这些版本仓库。

·启动器

 2.主程序

·注解

    SpringBoot项目无需各种配置文件,通过main方法启动SpringApplication类的静态方法run()来启动项目。

@SpringBootApplication是一个复合注解:

 其中有三个注解是比较重要的:

    ①@SpringBootConfiguration:这个注解的底层是一个@Configuration注解(spring配置类),意思被@Configuration注解修饰的类是一个IOC容器,支持JavaConfig的方式来进行配置;再点进去是一个@Component(spring组件)。

    ②@ComponentScan:这个就是扫描注解的意思,默认扫描当前类所在的包及其子包下包含的注解,将@Controller/@Service/@Component/@Repository等注解加载到IOC容器中。

    ③@EnableAutoConfiguration:自动配置这个注解表明启动自动装配,点进去如下:

@AutoConfigurationPackage(自动配置包)和@ComponentScan一样,也是将主配置类所在的包及其子包里面的组件扫描到IOC容器中,但区别是@AutoConfigurationPackage扫描@Enitity、@MapperScan等第三方依赖的注解,@ComponentScan只扫描@Controller/@Service/@Component/@Repository这些常见注解。所以这两个注解扫描的对象。
 

@Import是自动装配的核心注解:

其底层有一个selectImport方法:

 该方法调用了getCandidateConfiguration(获取候选的配置):

 其中,META-INF/spring.factories:就是自动配置的核心文件

 spring.factories文件是一组一组的key=value的形式,其中一个key是EnableAutoConfiguration类的全类名,而它的value是一个xxxxAutoConfiguration的类名的列表,这些类名以逗号分隔如下

 总结

springboot所有的自动配置都是在启动的时候扫描并加载:spring.factories所有的自动配置类都在这里面,只要导入对应的start,就有了对应的启动器,自动装配就可生效。

 


2.3 主启动类如何运行

SpringApplication类主要做以下事情:

1.推断应用的类型是普通项目还是Web项目。

2.查找并加载所有可用初始化器,设置到initializers属性中。

3.找出所有应用程序监听器,设置到listeners属性中。

4.推断并设置main方法的定义类,找到运行的主类。


三、Yaml语法学习

3.1 SpringBoot配置

SpringBoot 使用一个全局的配置文件 , 配置文件名称是固定的。(两种)
(可以同时存在多个配置文件,但是配置文件有优先级)
①application.properties
    语法结构 : key=value
②application.yml
    语法结构 : key :“空格” value

配置文件的作用 : 修改 SpringBoot 自动配置的默认值,因为 SpringBoot 在底层都给我们自动配置好了。
xml与yaml区别:

 yaml基础语法:


3.2 注入配置文件

1.yaml文件更强大的地方在于,他可以给我们的实体类直接注入匹配值。

以前:

①编写一个实体类Dog: (alt+insert 自动添加有参无参等...)

 ②为其赋值:(通过@Value)

③在测试类中测试:(@Autowired 自动装配) 

 现在:

使用yaml配置的方式进行注入  

Person类:

在yaml中配置:

@ConfigurationProperties

 注:若出现问题,需在pom中加入如下依赖

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

2.加载指定配置文件

@PropertySource: 加载指定的配置文件。

@configurationProperties: 默认从全局配置文件中获取值。

总结

如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value
如果说,我们专门编写了一个 JavaBean 来和配置文件进行一一映射,就直接
@confifigurationProperties。

JSR303数据校验

@validated


 四、多环境配置及配置文件位置

1. 用properties配置

    profile Spring 对不同环境提供不同配置功能的支持,可以通过激活不同的环境版本,实现快速切换环境。
    我们在主配置文件编写的时候,文件名可以是 application-{profifile}.properties/yaml , 用来指定多个环境版本;
    例如: application-test.properties 代表测试环境配置
               application-dev.properties 代表开发环境配置
    但是 Springboot 并不会直接启动这些配置文件,它 默认使用 application.properties 主配置文件

选择激活哪一个环境: 

2. 用yaml配置

yaml可以通过---来切分成多个模块 

#选择要激活那个环境块 
spring :
profiles :     # 配置环境的名称
active : prod    


五、自动配置原理

P12 待看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值