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

Spring Boot中配置文件介绍及其使用教程

目录

一、配置文件介绍

二、配置简单数据

三、配置对象数据

四、配置集合数据

五、读取配置文件数据

六、占位符的使用


一、配置文件介绍

SpringBoot项目中,大部分配置都有默认值,但如果想替换默认配置的话,就可以使用application.properties或者application.yml或者application.yaml进行配置。SpringBoot默认会从resources目录下加载application.properties或application.yml文件。其中,application.properties文件是键值对类型的文件,之前一直在使用,所以我们不再对properties文件进行阐述。

如果我们想要查找配置文件如何覆盖SpringBoot项目的默认配置,那么可以查看下面链接:

Spring Boot Reference Documentationicon-default.png?t=N7T8https://docs.spring.io/spring-boot/docs/2.7.6/reference/htmlsingle/#appendix.application-properties.server 除了properties文件外,SpringBoot还支持YAML文件进行配置。YAML文件的扩展名为 .yml 或 .yaml ,它的基本要求如下:

  • 大小写敏感
  • 使用缩进代表层级关系
  • 相同的部分只出现一次

比如使用properties文件配置tomcat端口:

server.port=8888 

 而使用YAML文件配置tomcat端口:

server:
        port: 8888

二、配置简单数据

除了覆盖默认配置,我们还可以在YAML文件中配置其他信息以便我们在项目中使用。配置简单数据的方式如下:

语法:

数据名: 值

示例: 

name: LYL

注意:value之前有一个空格 

三、配置对象数据

语法:

对象:
        属性名1: 属性值
        属性名2: 属性值
# 或者
对象: {属性名1: 属性值,属性名2: 属性值}

示例:

student:
  age: 10
  female: male
  address: Guangzhou
# 学生2
student2: {sex: male,age: 10,address: Guangzhou}

注意:属性名前面的空格个数不限,在yml语法中,相同缩进代表同一个级别,只要每个属性前的空格数一样即可。 

四、配置集合数据

语法:

集合:
        - 值1
        - 值2
# 或者
集合: [值1,值2]

示例:

city1:
  - Beijing
  - Shanghai
  - Shenzhen
  - Guangzhou

# 集合中元素是对象

students:
  - score: 100
    name: zhangsan
    age: 10
  - score: 95
    name: lisi
    age: 25
  - score: 78
    name: wangwu
    age: 15

user:
  id: 1001
  username: LYL
  address:
    - Beijing
    - Shanghai
    - Guangzhou
    - Shenzhen
  grades:
    - subject: math
      score: 90
    - subject: english
      score: 39

五、读取配置文件数据

我们可以通过@Value注解将配置文件中的值映射到一个Spring管理的Bean的字段上,用法如下:

yml文件如下:


name: zhangsanstudent:age: 10female: maleaddress: Guangzhoucity1:- Beijing- Shanghai- Shenzhen- Guangzhoustudents:- score: 100name: zhangsanage: 10- score: 95name: lisiage: 25- score: 78name: wangwuage: 15user:id: 1001username: LYLaddress:- Beijing- Shanghai- Guangzhou- Shenzhengrades:- subject: mathscore: 90- subject: englishscore: 39

读取配置文件:

package com.example.demo.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class YmlController1 {@Value("${name}")private String name;@Value("${students[1].name}")private String stu_name;@Value("${city1[3]}")private String address;@RequestMapping("/yml1")@ResponseBodypublic String yml1(){System.out.println(name);System.out.println(stu_name);System.out.println(address);return name+" "+stu_name+" "+address;}
}

 接下来我们运行一下看看能否获得数据:

OK,控制台和网页端都是可以成功读取数据的。

不过要注意的是:@Value只能映射简单数据类型,不能将yaml文件中的对象、集合映射到属性中。

那我们应该如何映射到实体类呢,通过 @ConfigurationProperties(prefifix="对象") 可以将配置文件中的配置自动与实体进行映射,这样可以将yml文件中配置的对象属性直接映射到Bean当中。

OK,我们来新建一个实体类:Grade,因为User属性中含有该对象:

package com.example.demo.pojo;public class Grade {private String subject;private int score;public Grade(){};public String getSubject() {return subject;}public void setSubject(String subject) {this.subject = subject;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}@Overridepublic String toString() {return "Grade [ " +"subject='" + subject + '\'' +", score=" + score +" ]";}
}

再来编写一个控制类读取配置文件:

package com.example.demo.controller;import com.example.demo.pojo.Grade;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import java.util.List;@Controller
@ConfigurationProperties(prefix = "user")
public class YmlController2 {private int id;private String username;private List<String> address;private List<Grade> grades;@RequestMapping("/yml2")public void yml2(){System.out.println(id);System.out.println(username);System.out.println(address);System.out.println(grades);}@Overridepublic String toString() {return "YmlController2 [" +"id=" + id +", username='" + username + '\'' +", address=" + address +", grades=" + grades +" ]";}public YmlController2() {}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public List<String> getAddress() {return address;}public void setAddress(List<String> address) {this.address = address;}public List<Grade> getGrades() {return grades;}public void setGrades(List<Grade> grades) {this.grades = grades;}
}

好了,现在我们运行看看能否获得数据:

OK,在控制台中成功打印了说明该注解生效,是可以使用的。

六、占位符的使用

YAML文件中可以使用 ${} 占位符,它有两个作用:

使用配置文件中的值

比如说我们使用自定义的端口,并在页面展示:配置文件如下图

我们再写一个控制器方法

package com.example.demo.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class YmlController3 {@Value("${myConfig.serverPort}")private int port;@RequestMapping("yml3")@ResponseBodypublic String getPort(){return "你的自定义端口为:"+port;}
}

运行测试

也可以是可以成功注入的。 

使用框架提供的方法

SpringBoot框架提供了一些生成随机数的方法可以在yml文件中使用:

  • ${random.value} :生成类似uuid的随机数,没有"-"连接
  • ${random.uuid} :生成一个uuid,有短杠连接
  • ${random.int} :随机取整型范围内的一个值
  • ${random.int(10)}:随机生成一个10以内的数
  • ${random.int(100,200)}:随机生成一个100-200 范围以内的数
  • ${random.long}:随机取长整型范围内的一个值
  • ${random.long(100,200)}:随机生成长整型100-200范围内的一个值

比如说随机生成一个1000-9999的端口:

http://www.lryc.cn/news/178264.html

相关文章:

  • Hobby脚本自动化工具
  • Matlab随机数的产生
  • 计算机网络 第四章:网络层
  • 分享一个docker无法启动的小问题
  • Linux 安全 - Capabilities机制
  • 分布式搜索引擎es-3
  • Matlab坐标轴标签中文设置宋体
  • 做一个贪吃蛇小游戏happy一下
  • opencv形态学-膨胀
  • 玄子Share 设计模式 GOF 全23种 + 七大设计原则
  • 单链表操作 C实现
  • WordPress主题网站首页添加好看的四格小工具教程
  • unittest自动化测试框架讲解以及实战
  • 数学建模之Matlab基础操作
  • 【Nuxt】04 Nuxt2-SEO: sitemap.xml、seo优化、robots.txt
  • VMware VSAN 入门
  • 【设计模式】备忘录模式
  • vue3+elementUiPlus表格导出功能
  • 专题五:优先级队列
  • 游戏设计模式专栏(一):工厂方法模式
  • element中使用el-steps 进度条效果demo(整理)
  • 038:mapboxGL 旋转地图(rotateTo)
  • java遇到的问题
  • LLM(二)| LIMA:在1k高质量数据上微调LLaMA1-65B,性能超越ChatGPT
  • Android AMS——创建Application(七)
  • html 边缘融合加载
  • ElasticSearch - 在 微服务项目 中基于 RabbitMQ 实现 ES 和 MySQL 数据异步同步(考点)
  • Springboot+vue的企业人事管理系统(有报告),Javaee项目,springboot vue前后端分离项目。
  • 初识Java 11-1 函数式编程
  • 【Ambari】银河麒麟V10 ARM64架构_安装Ambari2.7.6HDP3.3.1问题总结