SpringBoot配置文件之properties和yml的使用

 更新时间:2025年05月04日 21:43:56   作者:棕豆兔&  
这篇文章主要介绍了SpringBoot配置文件之properties和yml的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、配置文件的作用

配置文件主要是为了解决硬编码带来的问题, 把可能会发生改变的信息,放在一个集中的地方, 当我们启动某个程序时, 应用程序从配置文件中读取数据, 并加载运行。

使用配置文件, 可以使程序完成用户和应用程序的交互, 或者应用程序与其他应用程序的交互。

SpringBoot支持并定义了配置文件的格式,也在另一个层面达到了规范其他框架集成到SpringBoot的目的。很多项目或者框架的配置信息也放在配置文件中, 比如:

  • 项目的启动端口;
  • 数据库的连接信息(包含用户名和密码的设置);
  • 第三方系统的调用密钥等信息;
  • 用于发现和定位问题的普通日志和异常日志等。

二、配置文件的格式

Spring Boot 配置文件有以下三种:

  • application.properties
  • application.yml
  • application.yaml

yml 为yaml的简写, 实际开发中出现频率最高。yaml 和yml 的使用方式一样。

NOTE:

  • 理论上讲 .properties 和 .yml 可以并存在于一个项目中,当 .properties 和 .yml 并存时,两个配置都会加载。如果配置文件内容有冲突,则以 .properties 为主,也就是 .properties 优先级更高;
  • 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,通常会采取一种统一的配置文件格式,这样可以更好的维护(降低故障率)。

三、properties 配置文件说明

properties 配置文件是最早期的配置文件格式,也是创建 SpringBoot 项目默认的配置文件。

3.1 properties 基本语法

properties 是以键值的形式配置的,key 和 value 之间是以 "=" 连接的,如:

# 配置项⽬端⼝号
server.port=8080
#配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?
characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

3.2 读取配置文件

如果在项目中,想要主动的读取配置文件中的内容,可以使用 @Value 注解来实现。 @Value 注解使用" ${} "的格式读取,如下代码所示:

properties 配置如下:

mykey.key1 = bite

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class PropertiesController {
    @Value("${mykey.key1}")
    private String key1;

    @RequestMapping("/key")
    public String key(){
      return "读取到值:"+key1;
 }
}

四、yml 配置文件说明

yml 是 YAML 是缩写,它的全称 Yet Another Markup Language ,翻译就是 “另一种标记语言“。

4.1 yml基本语法

yml 是树形结构的配置文件,它的基础语法是"key: value"。key 和 value 之间使用英文冒号加空格的方式组成, 空格不可省略

基础语法举例如下:

spring:
 datasource:
  url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false
  username: root
  password: root

4.2 yml 读取文件

yml 读取配置的方式和 properties 相同,使用 @Value 注解即可,实现代码如下:

yml配置:

string:
 hello: bite
@RestController
public class ReadYml {
  @Value("${string.hello}")
  private String hello;

  @RequestMapping("/ymlKey")
  public String key(){
     return "读取到值:"+hello;
  }
}

NOTE: value值加单双引号

  • 字符串默认不用加上单引号或者双引号,如果加英文的单双引号可以表示特殊的含义。
  • 单引号会转义特殊字符,使其失去特殊功能,始终是一个普通的字符串;如 \n
  • 双引号不会转义字符串里面的特殊字符, 特殊字符会表示本身的含义。

yml配置不同数据类型及null:

#以下格式不代表yml文件格式,只是作为说明

# 字符串
string.value: Hello
  
# 布尔值,true或false
boolean.value: true
boolean.value1: false

# 整数
int.value: 10

# 浮点数
float.value: 3.14159

# Null,~代表null
null.value: ~

# "" 空字符串
# 直接后⾯什么都不加就可以了, 但这种⽅式不直观, 更多的表示是使⽤引号括起来
empty.value: ''

4.3 yml使用进阶

4.3.1 配置对象

在yml文件中配置对象,如下所示:

student:
 id: 1
 name: Java
 age: 18


#或者可以采用行内写法
student: {id: 1,name: Java,age: 18}

这个时候就不能用 @Value 来读取配置中的对象了,此时要使用另一个注解@ConfigurationProperties 来读取,具体实现如下:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {
 private int id;
 private String name;
 private int age;
}

调用类实现如下:

@RestController
public class StudentController {

 @Autowired
 private Student student;
 
 @RequestMapping("/readStudent")
 public String readStudent(){
     return student.toString();
 }
}

4.3.2 配置集合

配置文件也可以配置 list 集合,如下所示:

dbtypes:
 name:
  - mysql
  - sqlserver
  - db2

集合的读取和对象一样,也是使用 @ConfigurationProperties 来读取的,具体实现如下:

@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {
  private List<String> name;
}

访问集合的实现如下:

@RestController
public class ReadYml2 {

 @Autowired
 private ListConfig listConfig;

 @RequestMapping("/readList")
 public String readList(){
    return listConfig.toString();
 }
}

4.3.3 配置Map

配置文件也可以配置 Map,如下所示:

maptypes:
 map:
  k1: kk1
  k2: kk2
  k3: kk3

Map的读取和对象一样,也是使用 @ConfigurationProperties 来读取的,具体实现如下:

@Component
@ConfigurationProperties("maptypes")
@Data
public class MapConfig {
 private HashMap<String,String> map;
}

打印类的实现如下:

@RestController
public class ReadYml2 {

 @Autowired
 private MapConfig mapConfig;

 @RequestMapping("/readMap")
 public String readStudent(){
   return mapConfig.toString();
 }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 关于Spring中一级缓存、二级缓存和三级缓存的那些事

    关于Spring中一级缓存、二级缓存和三级缓存的那些事

    Spring解决循环依赖的核心思想在于提前曝,下面这篇文章主要给大家介绍了关于Spring中一级缓存、二级缓存和三级缓存的那些事,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • 一文详解Elasticsearch和MySQL之间的数据同步问题

    一文详解Elasticsearch和MySQL之间的数据同步问题

    Elasticsearch中的数据是来自于Mysql数据库的,因此当数据库中的数据进行增删改后,Elasticsearch中的数据,索引也必须跟着做出改变。本文主要来和大家探讨一下Elasticsearch和MySQL之间的数据同步问题,感兴趣的可以了解一下
    2023-04-04
  • Spring boot配置 swagger的示例代码

    Spring boot配置 swagger的示例代码

    Swagger是一组开源项目,Spring 基于swagger规范,可以将基于SpringMVC和Spring Boot项目的项目代码,自动生成JSON格式的描述文件,接下来通过本文给大家介绍Spring boot配置 swagger的示例代码,一起看看吧
    2021-09-09
  • JAVA遍历Map集合的几种方法汇总

    JAVA遍历Map集合的几种方法汇总

    这篇文章主要给大家介绍了关于JAVA遍历Map集合的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 使用@ConfigurationProperties注解获取为null的解决方法

    使用@ConfigurationProperties注解获取为null的解决方法

    在SpringBoot中,当想需要获取到配置文件数据时,除了可以用 Spring 自带的@Value注解外,SpringBoot还提供了一种更加方便的方式:@ConfigurationProperties,但我们在通过通过get方法去取值一直为null,本文介绍了使用@ConfigurationProperties注解获取为null的解决方法
    2024-09-09
  • Java如何正确的使用wait-notify方法你知道吗

    Java如何正确的使用wait-notify方法你知道吗

    这篇文章主要为大家详细介绍了Java如何正确的使用wait-notify方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • MyBatis配置与CRUD超详细讲解

    MyBatis配置与CRUD超详细讲解

    这篇文章主要介绍了MyBatis配置与CRUD,CRUD是指在做计算处理时的增加(Create)、读取(Read)、更新(Update)和删除(Delete)几个单词的首字母简写。CRUD主要被用在描述软件系统中数据库或者持久层的基本操作功能
    2023-02-02
  • 深入了解java Lombok的使用方法

    深入了解java Lombok的使用方法

    这篇文章主要介绍了深入了解java Lombok的使用,Lombok是一个通过注解以达到减少代码的Java库,如通过注解的方式减少get,set方法,构造方法等,需要的朋友可以参考下
    2019-06-06
  • Java使用Sa-Token框架完成踢人下线功能

    Java使用Sa-Token框架完成踢人下线功能

    踢人下线是一个很常见的需求,本文主要介绍了Java使用Sa-Token框架完成踢人下线功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • 详解SpringBoot如何使用JWT实现身份认证和授权

    详解SpringBoot如何使用JWT实现身份认证和授权

    JSON Web Token(JWT)是一种用于在网络应用之间安全传递信息的开放标准,本文主要为大家介绍了如何在Spring Boot中使用JWT实现身份认证和授权,需要的可以了解下
    2023-10-10

最新评论