SpringBoot的基础配置 - yaml文件的格式以及数据读取

news/2024/7/3 17:14:43

文章目录

  • SpringBoot基础配置
    • 配置文件格式
    • yaml文件格式
    • yaml数据读取

SpringBoot基础配置

配置文件格式

我们用修改服务器端口号来举例, 演示配置的格式

目前我们SpringBoot入门程序已经可以启动, 但是端口是使用的默认的8080

http://localhost:8080/books/1

修改服务器的端口号为80

http://localhost/books/1

SpringBoot提供了多种属性配置方式:

方式一: 在resource文件夹下application.properties文件中配置

server.port=80

方式二: 在resource文件夹下创建一个application.yml文件配置

server:
  port: 80

方式三: 在resource文件夹下创建一个application.yaml文件配置

server:
  port: 80

三种方式中, 我们最常写的是第二种: 创建一个application.yml文件进行配置

SpringBoot配置文件加载顺序和优先级(了解)

application.properties > application.yml > application.yaml

注意事项:

SpringBoot核心配置文件名为application

SpringBoot内置属性过多,且所有属性集中在一起修改,在使用时,通过提示键+关键字修改属性

yaml文件格式

YAML(YAML Ain’t Markup Language),一种数据序列化格式, 我们来对比一下XML、Properties和YAML的配置文件:

XML

<enterprise>
  <name>chenyq</name>
  <age>16</age>
  <tel>4006184000</tel>
</enterprise>

Properties

enterprise.name=chenyq
enterprise.age=16
enterprise.tel=4006184000

YAML

enterprise:
	name: chenyq
	age: 16
	tel: 4006184000

优点

容易阅读

容易与脚本语言交互

以数据为核心,重数据轻格式

yaml文件扩展名

.yml(主流)

.yaml

yaml文件语法规则

大小写敏感

属性层级关系使用多行描述,每行结尾使用冒号结束

使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)

属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)

# 表示注释

重点注意:数据前面要加空格与冒号隔开

yaml数组数据:

数组数据在数据书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔

enterprise:
  name: chenyq
  age: 16
  tel: 12312345678
  subject:
    - Java
    - 前端
    - 大数据

yaml数据读取

例如application.yml文件中的数据如下:

enterprise:
  name: chenyq
  age: 16
  tel: 12312345678
  subject:
    - Java
    - 前端
    - 大数据

方式一: 使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名……}

@RestController
@RequestMapping("/books")
public class BookController {
  	// 读取文件中的数据
    @Value("${enterprise.name}")
    private String name;

    @GetMapping("/{id}")
    public String selectById(@PathVariable Integer id) {
        System.out.println(name);
        return "hello spring boot";
    }
}

读取文件中数组数据

@RestController
@RequestMapping("/books")
public class BookController {
    @Value("${enterprise.subject[0]}")
    private String subject1;
    @Value("${enterprise.subject[1]}")
    private String subject2;

    @GetMapping("/{id}")
    public String selectById(@PathVariable Integer id) {
        System.out.println(subject1); // Java
        System.out.println(subject2); // 前端
        return "hello spring boot";
    }
}

方式二: 方式一读取数据的方式太过于分散, 我们可以将文件中的全部数据封装到Environment对象(框架常用)

再通过Environment对象的getProperty方法读取属性

@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    // 读取全部数据封装到environment对象中
    private Environment environment;

    @GetMapping("/{id}")
    public String selectById(@PathVariable Integer id) {
      	// 再通过Environment对象的getProperty方法读取属性
        System.out.println(environment.getProperty("enterprise.name"));
        System.out.println(environment.getProperty("enterprise.subject[1]"));
        return "hello spring boot";
    }
}

方式三: 自定义对象, 封装实体类, 实体类的属性与要读取的数据一一对应数据, 封装后再读取(常用)

将实体类定义为bean, 并配置当前对象从配置中读取enterprise属性;

@Component // dingyiweibean
@ConfigurationProperties(prefix = "enterprise") // 读取配置中的enterprise属性
public class Enterprise {
    private String name;
    private Integer age;
    private String tel;
    private String[] subject;
}

此时实体类的属性和配置文件中就会一一对应, 我们使用数据只需使用Enterprise对象即可

@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
  	// 自动装配Environment对象
    private Environment environment;

    @GetMapping("/{id}")
    public String selectById(@PathVariable Integer id) {
      	// 通过对象可以获取数据
        System.out.println(enterprise);
        return "hello spring boot";
    }
}

自定义对象封装数据警告解决方案

我们在自定义类时出现如下警告

在这里插入图片描述

解决方案: 在pom.xml文件中添加如下依赖即可解决

<!--解决警告-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>

http://lihuaxi.xjx100.cn/news/1247064.html

相关文章

Android+Rxjava3入门小例子--读取图片并显示

第三次学习Rxjava了&#xff0c;这次一定要学会&#xff0c;至少入门吧。。。 为什么要学习这个东东呢&#xff1f; 经常碰到与安卓系统交互的外部设备是应答式的&#xff0c;就是你一步步的问它&#xff0c;它一步步的回答&#xff0c;例如某厂商的指纹仪进行指纹比对操作&am…

【CompareAndSwap底层原理】

文章目录 CompareAndSwap底层原理小故事 CompareAndSwap底层原理 CompareAndSwap&#xff08;CAS&#xff09;是一种并发编程中的操作&#xff0c;它可以判断一个变量的当前值是否与预期值相同&#xff0c;如果相同&#xff0c;就将该变量的值设置为新值。CAS操作通常用于多线…

Mini LED电视大热,“智能化”渐行渐远?

在中国&#xff0c;电视机几乎是每个家庭必备的家用电器。相较于手机、平板、电脑、学习机等产品而言&#xff0c;由于电视机的屏幕足够大&#xff0c;所以其带给用户的视觉体验会相对更好一些&#xff0c;而影响用户视觉体验的除了屏幕大小以外&#xff0c;还有显示技术。 前…

微信小程序实现选择地区demo,记录最近访问的地区

最终效果图&#xff1a; index.wxml <view class"container"><view class"search_contaniner"><view class"search_box"><input type"text" placeholder"省/市级/区县级" value"{{search_con…

1.5 掌握Scala内建控制结构(一)

一、条件表达式 &#xff08;一&#xff09;语法格式 if (条件) 值1 else 值2 &#xff08;二&#xff09;执行情况 条件为真&#xff0c;结果是值1&#xff1b;条件为假&#xff0c;结果是值2。如果if和else的返回结果同为某种类型&#xff0c;那么条件表达式结果也是那种…

10 个杀手级的Python自动化脚本,解放你的双手

重复性任务总是耗时且无聊&#xff0c;想一想你想要一张一张地裁剪 100 张照片或 Fetch API、纠正拼写和语法等工作&#xff0c;所有这些任务都很耗时&#xff0c;为什么不自动化它们呢&#xff1f;在今天的文章中&#xff0c;我将与你分享 10 个 Python [自动化脚本]。 所以&a…

网络编程与自动化(python)

20.1 网络编程与自动化概述 传统网络运维困境大家在日常的网络运维中是否遇到过如下问题: 设备升级:现网有数千台网络设备,你需要周期性、批量性地对设备进行升级。配置审计:企业年度需要对设备进行配置审计。例如要求所有设备开启sTelnet功能,以太网交换机配置生成树安全…

【mmcls】mmdet中使用mmcls的网络及预训练模型

mmcls现在叫mmpretrain&#xff0c;以前叫mmclassification&#xff0c;这里为了统一称为mmcls。在基于MM框架的下游任务&#xff0c;例如检测(mmdetection)中可以使用mmcls中的backbone进行特征提取&#xff0c;但这就需要知道网络的参数以及输出特征的维度。本文简单介绍了在…