当前位置: 首页 > news >正文

TYUT-企业级开发教程-第二章

SpringBoot的配置文件

全局配置文件能够对一些默认配置值进行修改。 Spring Boot 默认使用的全局配置文件有
application.properties 和 application.yml , Spring Boot 启动时会自动读取这两个文
件中的配置,如果文件中存在与默认自动配置相同的配置信息,则覆盖默认的配置信息

application.properties

1. 字面量类型属性


如果需要配置的属性为对象的属性,可以通过“对象名 . 属性名”的方式指定属性的键。对象中可能
包含多个属性,在 application.properties 文件中为对象的属性赋值时,一个属性对应一对键值对。

user.username=lisi
user.age=18

 2.数组类型属性
 

在 application.properties 文件中配置数组类型属性时,可以将数组元素的值写在一行内,元素值之
间使用逗号( , )间隔,也可以在多行分别根据索引赋值

 方式一
user.hobby=swim,travel,cook
# 方式二
user.hobby[0]=swim2
user.hobby[1]=travel2
user.hobby[2]=cook2

3.集合类型属性 

List 、 Set 、 Map

# 配置 List: 方式一
user.subject=Chinese,English,Math
# 配置 List: 方式二
user.subject[0]=Chinese
user.subject[1]=English
user.subject[2]=Math
 配置 Set
user.salary=120,230
# 配置 Map 方式一
user.order.1001=cookie
user.order.1002=cake
# 配置 Map 方式二
user.order[1001]=cookie
user.order[1002]=cake

application.yml

支持的数据包括列表、键值对和字符串、数字等

规则:重点

  • 使用缩进表示层级关系。
  •  缩进时不允许使用 Tab 键,只允许使用空格。
  •  缩进的空格数不重要,但同级元素必须左侧对齐
  •  大小写敏感

字面类型配置

# 缩进式
consumer:
username: lisi
age: 18
# 行内式
consumer: {username: lisi,age: 18}

数组类型和单列集合属性

缩进试
consumer:
hobby:
- play
- read
- sleep
行内式
consumer:
hobby: [play,read,sleep]

MAP结合属性

缩进式
consumer:
order:
1001: cookie
1002: cake
行内式
consumer:
order: {1001: cookie,1002: cake}

 有关配置绑定相关的注解

@Value

  @Value 注解是由 Spring 框架提供的, Spring Boot 框架从 Spring 框架中对 @Value 注解进行了
默认继承,通过 @Value 可以将配置文件中的属性绑定到 Bean 对象对应的属性

 yaml
consumer:username: lisiage: 23hobby: sing,read,sleepsubject: 100,150
import org.springframework.stereotype.Component;
import org.springframework.beans.factory.annotation.Value;import java.util.Arrays;
import java.util.List;@Component
public class Consumer {@Value("${consumer.username}")private String username;@Value("${consumer.age}")private int age;@Value("#{'${consumer.hobby}'.split(',')}")private String[] hobby;@Value("${consumer.subject}")private List subject;// 生成getter方法以及toString()方法public String getUsername() {return username;}public int getAge() {return age;}public String[] getHobby() {return hobby;}public List getSubject() {return subject;}@Overridepublic String toString() {return "Consumer{" +"username='" + username + '\'' +", age=" + age +", hobby=" + Arrays.toString(hobby) +", subject=" + subject +'}';}
}

测试类

import com.itheima.domain.Consumer;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class Chapter02ApplicationTests {@Autowiredprivate Consumer consumer;@Testvoid wiredTest() {System.out.println(consumer);}
}

Environment对象

Environment与@Value对比

使用 @Value 注解时,将该注解标注在 Spring 管控的 Bean 的属性名上方,就可以将某
个数据绑定到 Bean 对象的属性。当 Bean 的属性比较多且这些属性都需要绑定配置的数
据时,操作起来就比较烦琐
。为此, Spring Boot 提供了一个对象 Environment ,项目
启动时能够将配置文件中的所有数据都封装到该对象中,这样就不需要手动对配置数据进
行绑定

@Autowired
private Environment env;
@Test
void evnTest() {
System.out.println("consumer.username="+env.getProperty("consumer.username"));
System.out.println("consumer.age="+env.getProperty("consumer.age"));
System.out.println("consumer.hobby="+env.getProperty("consumer.hobby"));
System.out.println("consumer.subject="+env.getProperty("consumer.subject"));}

@ConfigurationProperties 注解

Java 是面向对象的语言,很多情况下,人们习惯将具有相同特性的一组数据封装到一个对
象 中 , Spring Boot 中 就 提 供 了 这 样 的 注 解 。 Spring Boot 的@ConfigurationProperties 注解可以 可以将配置文件中的一组配置数据同时绑定 到Bean 中

@Component
@ConfigurationProperties(prefix = "consumer")
public class Consumer {
private String username ;
private int age;
private String[] hobby;
private List subject;
//……setter/getter 方法,以及 toString() 方法
}

两个注解的对比


 

 

 定义Profile

在实际开发中,根据项目的开发进度,项目经常需要在不同的部署环境间切换,常见部署
的环境有开发环境、测试环境、生产环境。不同环境使用的配置信息往往不同,而且项目
的配置信息往往有很多,如果每次变更项目部署的环境时,都采用手动方式更改配置信息
会很麻烦。
针对这种情况,在 Spring Boot 中可以使用 Profile 解决这类问题, Profile 使 Spring
Boot 可以针对不同的环境提供不同的配置。在 Spring Boot 中可以将 Profile 配置在单一
文件中和多个文件中,也可以通过 @Profile 注解指定 Bean 的生效环境。

Spring Boot 中可以在配置文件使用 spring.config.activate.on-profile 指定 Profile 的
名 称 , 使 用 spring.profiles.active 指 定 激 活 哪 个 Profile , 如 果 需 要 激 活 多 个
Profile , Profile 名称之间使用逗号间隔即可。
每个 Profile 中的配置信息都对应于一个部署环境,在单一 YAML 文件配置多个 Profile
时,可以通过三个短横线号( --- )将不同的 Profile 分隔开

YAML与Profile是一对多的。


 

 
第二章题目

一、填空题
1.application.properties文件中属性通过  键值对   格式进行设置。 
2.application.yml中配置的属性为数组类型或单列集合时,空格和属性值之间使用 间隔。 
3.@ConfigurationProperties注解的  prefix   属性可以指定绑定配置文件中属性的前缀。 
4.  profile   可以让Spring Boot对不同的环境提供不同配置的功能。 
5.@ConfigurationProperties注解的  prefix   属性可以指定绑定配置文件中属性的前缀。

二、判断题
1.默认情况下,application.properties文件中配置的字符串必须使用单引号或双引号进行修饰。 ( X)

解析:不需要

user.username=lisi
user.age=18

2.YAML配置文件的行内式写法配置单列集合属性,包含属性值的中括号“[]”可以省略。 ( 对)
3.@Value注解支持SpEL表达式进行Bean的属性值注入。(对 ) 


4.@ConfigurationProperties注解进行配置文件属性注入时,不需要设置属性的setter方法。( 错)看上图 @Value注解不需要,@ConfigurationProperties需要
5.在Spring Boot中可以将Profile配置在多个文件中。 ( 对)

三、选择题
1.下列选项中,对于application.yml中配置属性的规则描述错误的是(B)。 
A.使用缩进表示层级关系。
B.可以使用Tab键进行缩进。
C.同级元素必须左侧对齐。
D.大小写敏感。

解析:

规则:重点

  • 使用缩进表示层级关系。
  •  缩进时不允许使用 Tab 键,只允许使用空格。
  •  缩进的空格数不重要,但同级元素必须左侧对齐
  •  大小写敏感

2.下列选项中,对@Value注解的描述错误的是(C)。 
A.Spring Boot框架从Spring框架中对@Value注解进行了默认继承。
B.@Value可以将配置文件中的属性绑定到Bean对象对应的属性。
C.使用@Value注解对属性注入值时,类中必须同时提供属性的getter()和setter()方法。
D.@Value注解对于Map集合的属性注入支持效果不佳。

解析:

@Value注解不需要,@ConfigurationProperties需要

3.下列选项中,对于@ConfigurationProperties注解的描述错误的是(D)。 
A.@ConfigurationProperties注解可以将配置文件中的一组配置数据同时绑定到Bean中。
B.@ConfigurationProperties注解的prefix属性指定绑定配置文件中属性的前缀。
C.实体类中的属性名需要和绑定的配置文件中属性名保持一致。
D.@ConfigurationProperties注解时,也需要在属性上方标注@Value注解。

4.下列选项中,关于在Spring Boot的配置文件中配置Profile的描述错误的是(D)。 
A.可以在配置文件使用 spring.config.activate.on-profile指定Profile的名称。
B.使用spring.profiles.active指定激活哪个Profile。
C.如果需要激活多个Profile,Profile名称之间使用逗号间隔即可。
D.单一YAML文件中只能配置单个Profile。

解析:

每个 Profile 中的配置信息都对应于一个部署环境,在单一 YAML 文件配置多个 Profile
时,可以通过三个短横线号( --- )将不同的 Profile 分隔开

5.下列选项中,在Spring Boot配置文件中用于激活指定Profile的属性是(B)。 
A.spring.config.activate.on-profile    指定名称
B.spring.profiles.active                     指定激活那个
C.server.port                                  
D.spring.application.name               spring启动类名称

解析:

Spring Boot 中可以在配置文件使用 spring.config.activate.on-profile 指定 Profile 的
名 称 , 使 用 spring.profiles.active 指 定 激 活 哪 个 Profile , 如 果 需 要 激 活 多 个
Profile , Profile 名称之间使用逗号间隔即可。

相关文章:

  • MinIO:从入门到精通,解锁云原生存储的奥秘
  • Linux下 使用 SSH 完成 Git 绑定 GitHub
  • 广域网学习
  • Flink 的水印机制
  • AI大模型学习二十六、使用 Dify + awesome-digital-human-live2d + ollama + ChatTTS打造数字人
  • nginx概念及使用
  • Python format()函数高级字符串格式化详解
  • 字节跳动开源通用图像定制模型DreamO,支持风格转换、换衣、身份定制、多条件组合等多种功能~
  • 测试--测试分类 (白盒 黑盒 单元 集成)
  • Git目录分析与第一个git commit文件
  • 最新最热门的特征提取方式:CVOCA光学高速复值卷积
  • Python打卡 DAY 29
  • 一文读懂软链接硬链接
  • Kubernetes控制平面组件:Kubelet详解(七):容器网络接口 CNI
  • PyQt5基本窗口控件(对话框类控件)
  • UCOS 嵌入式操作系统
  • 【深度学习】#12 计算机视觉
  • AutoGPT-Agent简述版
  • vscode中Debug c++
  • 【言语理解】逻辑填空之逻辑对应11
  • 全中国最好的十个博物馆展陈选出来了!
  • 体坛联播|水晶宫队史首夺足总杯,CBA总决赛爆发赛后冲突
  • 广西鹿寨一水文站“倒刺扶手”存安全隐患,官方通报处理情况
  • 菲律宾中期选举结果揭晓,马科斯与杜特尔特家族重回“权力的游戏”
  • 出走的苏敏阿姨一路走到了戛纳,这块红毯因她而多元
  • 3月中国减持189亿美元美债、持仓规模降至第三,英国升至第二