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

news2024/11/22 0:55:08

文章目录

  • 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://www.coloradmin.cn/o/649172.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CleanMyMacX4.13.4中文免费版mac电脑管家

CleanMyMac X这款软件集成清理、mac保护、速度优化维护、应用程序管理和文件管理5大功能&#xff0c;使用过程安全高效&#xff0c;用户不必担心误操作导致系统的崩溃。作为一款专业的mac电脑系统管家&#xff0c;CleanMymac X一直致力于更加智能、便捷地全方位维护我们的电脑&…

基于servlet+jsp+mysql人事工资管理系统(含实训报告)

基于servletjspmysql人事工资管理系统 一、系统介绍二、功能展示1.用户登陆2.查看个人信息3.查看个人工资、查看考勤4.查看自己所在部门5.人员信息管理6.考勤管理&#xff08;管理员&#xff09;7.工资管理&#xff08;管理员&#xff09;8.部门管理&#xff08;管理员&#xf…

批量生成,本地推理,人工智能声音克隆框架PaddleSpeech本地批量克隆实践(Python3.10)

云端炼丹固然是极好的&#xff0c;但不能否认的是&#xff0c;成本要比本地高得多&#xff0c;同时考虑到深度学习的训练相对于推理来说成本也更高&#xff0c;这主要是因为它需要大量的数据、计算资源和时间等资源&#xff0c;并且对超参数的调整也要求较高&#xff0c;更适合…

大数据处理架构Hadoop

大数据处理架构 Hadoop 概述Hadoop简介Hadoop的特性 Hadoop项目架构Hadoop的安装和使用Hadoop的安装方式Hadoop的安装配置&#xff08;单机/伪分布式&#xff09;SSH登录权限设置单机安装配置伪分布式安装配置 Hadoop集群的部署与使用Hadoop集群中有哪些节点类型集群规模要多大…

Python高级系列教程:HTTP协议与静态Web服务器开发

学习目标 1、了解HTTP协议的基本概念 2、掌握HTTP请求报文与响应报文 3、学会使用开发者工具查看HTTP协议的通信过程 4、搭建Python自带的静态Web服务器 5、掌握Python静态Web服务器开发 一、HTTP协议概述 1、网址URL 网址又称为URL&#xff0c;URL的英文全拼是(Uniform …

Vue中如何进行表格合并与拆分

Vue中如何进行表格合并与拆分 在Vue应用程序中&#xff0c;表格是一个非常常见的组件。有时候我们需要对表格进行合并或拆分来满足特定的需求。在本文中&#xff0c;我们将介绍如何在Vue中进行表格的合并和拆分。 如何进行表格合并&#xff1f; 表格合并是指将多行或多列的单…

如何使用ArcGIS制作SketchUp格式三维建筑

GIS数据也可以和传统的三维建模软件进行结合&#xff0c;在很长一段时间内&#xff0c;一直有客户问如何将水经微图中下载的建筑数据转换为SketchUp模型&#xff0c;这里给大家找到了一种解决方案&#xff0c;可以通过插件进行转换&#xff0c;希望能够对你有所帮助。 加载插件…

恶劣天气条件下激光雷达感知研究综述

摘要 自动驾驶汽车依靠各种传感器来收集周围环境的信息。车辆的行为是根据环境感知进行规划的&#xff0c;因此出于安全考虑&#xff0c;其可靠性至关重要。有源激光雷达传感器能够创建场景的精确3D表示&#xff0c;使其成为自动驾驶汽车环境感知的宝贵补充。由于光散射和遮挡&…

C++11学习笔记(3)——通用工具(上)(包含重要特性智能指针Smart pointer)

1.Pair 在C11中&#xff0c;std::pair是一个模板类&#xff0c;用于将两个值组合成一个单元。它可以将两个不同的类型的值配对在一起&#xff0c;并且提供了对这对值的访问和操作。 std::pair的定义 template<class T1, class T2> struct pair{T1 first;T2 second; };…

ElasticSearch完整入门及springboot集成

目录 ElasticSearch概述ElasticSearch版本特性Elasticsearch 5Elasticsearch 6.0Elasticsearch 7.0Elasticsearch 8.0 ElasticSearch安装Windowslinux Kibana安装Windowslinux使用 IK分词器(elasticsearch插件)安装自定义的词典 ES的基本使用字段数据类型索引操作文档操作创建文…

什么是oa系统,什么是工单系统,有啥区别?

什么是oa系统&#xff0c;什么是工单系统&#xff0c;有啥区别&#xff1f; 一、OA系统与工单系统介绍 1、什么是OA系统 OA系统全称为Office Automation&#xff0c;即办公自动化系统。它是一种专门为企业和机构的日常办公工作提供服务的综合性软件平台&#xff0c;具有信息…

apple pencil有买的必要吗?平板电容笔推荐平价

在当今时代&#xff0c;高科技已经成为推动电子产品发展的重要动力之一。无论是在工作上&#xff0c;还是在学习上&#xff0c;iPad平板的使用都很方便。iPad将会和我们的生活联系在一起&#xff0c;不管是现在还是未来。iPad配上一个简单的电容笔&#xff0c;不仅可以提高工作…

分享11个常用的VSCode快捷键,让你编码更高效

因为频繁切换到鼠标可能会对你的手腕造成不利影响。 说实话&#xff0c;快速编程是我继续编码的原因之一&#xff08;开个玩笑&#xff0c;除非...&#xff09;。无论如何&#xff0c;我发现让我变得更快的关键是与鼠标分离。想一想&#xff0c;每次你需要移动鼠标时&#xff0…

STM32单片机(六)TIM定时器 -> 第四节:TIM输出比较练习(PWM驱动LED呼吸灯、PWM驱动舵机以及PWM驱动直流电机)

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

CSS查缺补漏之如何优雅解决margin垂直方向塌陷与合并问题?

一&#xff1a;父子元素之间margin垂直方向塌陷问题 在处理margin垂直方向问题时&#xff0c;经常会遇到在给子元素设置margin时&#xff0c;导致效果出现在了父元素上&#xff1b;如下代码所示&#xff1a; 代码原义是想实现三方面&#xff1a; ① 将box1的margin-top调为5…

从实现到原理,总结11种延迟任务的实现方式(上)

1 前言 延迟任务在我们日常生活中比较常见&#xff0c;比如订单支付超时取消订单功能&#xff0c;又比如自动确定收货的功能等等。 所以本篇文章就来从实现到原理来盘点延迟任务的11种实现方式&#xff0c;这些方式并没有绝对的好坏之分&#xff0c;只是适用场景的不大相同。…

高频前端React面试题汇总

近期整理了一下高频的前端面试题&#xff0c;分享给大家一起来学习。如有问题&#xff0c;欢迎指正&#xff01; 一、组件基础 1. React 事件机制 <div onClick{this.handleClick.bind(this)}>点我</div>React并不是将click事件绑定到了div的真实DOM上&#xff0…

ChatGPT+Mermaid自然语言流程图形化产出小试 | 京东云技术团队

ChatGPTMermaid语言实现技术概念可视化 本文旨在介绍如何使用ChatGPT和Mermaid语言生成流程图的技术。在现代软件开发中&#xff0c;流程图是一种重要的工具&#xff0c;用于可视化和呈现各种流程和结构。结合ChatGPT的自然语言处理能力和Mermaid的简单语法&#xff0c;可以轻…

【北邮国院大三下】Intellectual Property Law 知识产权基础 Week3

北邮国院大三电商在读&#xff0c;随课程进行整理知识点。仅整理PPT和相关法条中相对重要的知识点&#xff0c;个人认为相对不重要的细小的知识点不列在其中。如有错误请指出。转载请注明出处&#xff0c;祝您学习愉快。 如需要pdf格式的文件请私信联系或微信联系 本Week的主…

供应链|多期库存系统中具有销售损失的最优联合补货和转运策略

封面图来源&#xff1a; https://www.pexels.com/photo/aerial-shot-of-cargo-ship-on-sea-3840441/ 作者&#xff1a;Hossein Abouee-Mehrizi, Oded Berman, Shrutivandana Sharma 引用&#xff1a;Abouee-Mehrizi, H., Berman, O., & Sharma, S. (2015). Optimal joint r…