SpringBoot细说

SpringBoot 概念

SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻
辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度
上缩短了项目周期。2014年4月,SpringBoot1.0.0发布。Spring的顶级项目之一。

Spring缺陷

配置繁项

虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring用XML配置,而且是很多
XML配置。Spring2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。
Spring3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。
所有这些配置都代表了开发时的损耗。因为在思考Spring特性配置和解决业务问题之间需要进行思维切换,所
以编写配置挤占了编写应用程序逻辑的时间。和所有框架一样,Spring实用,但它要求的回报也不少。

依赖繁项

项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导
入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发
进度。

SpringBoot功能

SpringBoot并不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式

自动配置

SpringBoot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定
Spring配置应该用哪个,不该用哪个。该过程是SpringBoot自动完成的。

起步依赖

起步依赖本质上是一个Maven项目对象模型(ProjectObjectModel,POM),
定义了对其他库的传递依赖这些东西加在一起即支持某项功能简单的说,
起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能

小结
在spring-boot-starter-parent中定义了各种技术的版本信息,组合了一套最优搭配的技术版本。
在各种starter中,定义了完成该功能需要的坐标合集,其中大部分版本信息来自于父工程
我们的工程继承parent,引入starter后,通过依赖传递,就可以简单方便获得需要的jar包,并且不会存在版本冲突等问题

starter
SpringBoot中常见项目名称,定义了当前项目使用的所有依赖坐标,以达到减少依赖配置的目的
parent
所有SpringBoot项目要继承的项目,定义了若千个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的
spring-boot-starter-arent各版本间存在着诸多坐标版本不同
实际开发
使用任意坐标时,仅书写GAV中的G和A,V由SpringBoot提供,除非SpringBoot未提供对应版本V
如发生坐标错误,再指定Version(要小心版本冲突)

spring-boot-starter-parent

引入一些必要依赖,约定配置,以spring-boot-dependencies为父,

spring-boot-dependencies

用于定义属性和管理依赖和插件版本

辅助功能

提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等

SpringBoot在创建项目时,使用jar的打包方式
SpringBoot的引导类,是项目入口,运行main方法就可以启动项目
使用SpringBoot和Spring构建的项目,业务代码编写方式完全一样

SpringBoot配置

配置文件分类

SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用
application.properties或者application.yml(application.yaml)进行配置

SpringBoot提供了2种配置文件类型:properteis和yml/yam
默认配置文件名称:application
在同一级目录下优先级为:properties>yml>yaml

YML

YAML全称是YAMLAin’t Markup Language。YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,
容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如:C/C++,Ruby,Python,Java,Perl,C#,PHP
等。YML文件是以数据为核心的,比传统的xml方式更加简洁。
YAML文件的扩展名可以使用.yml或者.yaml

YAML:基本语法

大小写敏感
·数据值前边必须有空格,作为分隔符
使用缩进表示层级关系
·缩进时不允许使用Tab键,只允许使用空格(各个系统Tab对应的空格数目可能不同,导致层次混乱)
·缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
#表示注释,从这个字符一直到行尾,都会被解析器忽略

  #数组
address:
  - beijing
  - shanghai
  #数组行内写法

address2: [beijing,shanghai]
  #纯量
msg1: 'hello world'#不会识别转义字符,会原样输出
msg2: "hello world" #会识别转义字符
YAML:小结

1)配置文件类型
properties:和以前一样
yml/yaml:注意空格
2)yaml:简洁,以数据为核心
基本语法
大小写敏感
数据值前边必须有空格,作为分隔符
使用空格缩进表示层级关系,相同缩进表示同一级
数据格式
·对象
数组:使用“”表示数组每个元素
纯量
参数引用
${var}

SpringBoot读取配置内容

1) @Value
2) Environment
3)@ConfigurationProperties

@Value

@Value(${name})
private String name;
@Value(“address[0])
private String address;

Environment

@Autowired
private Environment environment;

void readAttributeTest(){
    System.out.println("环境:"+ environment.getProperty("spring.profiles.active"));
    System.out.println("var1:"+ environment.getProperty("diy.var1"));
    System.out.println("var2:"+environment.getProperty("diy.var2"));
}

@ConfigurationProperties

@ConfigurationProperties(prefix = "person")
@Component
public class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
@ConfigurationProperties 注解在 Spring Boot 中是一个非常有用的工具,它允许开发者将配置文件的属性映射到 Java 对象的字段上,从而提供了一种类型安全、结构化的方式来访问应用程序的配置。以下是 @ConfigurationProperties 注解的主要用处:

属性映射:
将配置文件(如 application.properties 或 application.yml)中的属性映射到 Java 对象的字段上。这使得通过 Java 类定义字段来组织和访问应用程序的配置变得容易。
例如,如果配置文件中有 person.username=John,你可以创建一个 Java 类 Person,并使用 @ConfigurationProperties(prefix = "person") 注解来将 username 属性映射到 Person 类的 username 字段上。
类型安全:
通过在 Java 类型上使用 @ConfigurationProperties 注解,可以实现类型安全的属性访问。
如果配置文件中的属性与 Java 类型不匹配,Spring 在启动时会报错,从而提前发现配置错误。
嵌套属性:
支持将配置文件中的属性嵌套到 Java 对象的嵌套字段中,使得可以更结构化地组织配置信息。
例如,你可以有 person.address.city=New York,并在 Java 中有一个嵌套的 Address 类来表示地址。
批量注入:
与 @Value 注解不同,@ConfigurationProperties 能够批量注入配置文件的属性,而不需要为每个属性单独使用 @Value。
这使得配置更加简洁和易于管理。
松散绑定:
支持松散绑定,即配置文件中的属性名不需要与 Java 字段名完全匹配。例如,PERSON_USERNAME 和 person-username 都可以映射到 username 字段上。
支持复杂类型:
@ConfigurationProperties 支持复杂类型的封装,如列表、集合、映射等,而 @Value 注解通常只支持基本类型和字符串。
与其他注解的结合:
可以与 @Configuration、@Component、@Service 等注解结合使用,将 Java 类定义为 Spring 管理的 Bean。
使用场景:
在 Spring Boot 中,@ConfigurationProperties 注解有多种使用场景,包括与 @Component 注解一起使用在 Bean 定义类上,与 @Bean 注解一起使用在配置类的 Bean 定义方法上,以及不可变的 @ConfigurationProperties 绑定等。
总之,@ConfigurationProperties 注解为 Spring Boot 应用程序提供了一种强大而灵活的方式来管理和访问配置文件中的属性。

多环境

profile

我们在开发SpringBoot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务
器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。profile功能就是来进行动态配置切换的
1)profile配置方式
多profile文件方式
yml多文档方式
2)profile激活方式
配置文件
虚拟机参数
命令行参数

properties文件多环境格式

#多环境文件命名格式(多个环境通过文件名来区分)
application-dev-properties #其中环境名为dev
application-test-properties #test
application-pro-properties #pro
#环境选择
spring.profiles.active = pro #在properties中用来指定环境

配置文件加载优先级

内部配置加载顺序

Springboot程序启动时,会从以下位置加载配置文件
1.file:/config/:当前项目下的/config目录下
2.file./:当前项目的根目录
3.classpath:/config/:classpath的/config目录
4.classpath:/:classpath的根目录
加载序为上文的排列序名,高优先级配置的属性会生效

外部配置加载顺序

通过官网查看外部属性加载顶序
点我跳转

  • 39
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值