springboot YAML配置

112 篇文章 0 订阅

常规配置

YAML是JSON的超集,简洁而强大,是一种专门用来书写配置文件的语言,可以替代application.properties。

在创建一个Spring Boot项目时,引入的spring-boot-starter-web依赖间接地引入了snakeyaml依赖,snakeyaml会实现对YAML配置的解析。YAML的使用非常简单,利用缩进来表示层级关系,并且大小写敏感。

在Spring Boot项目中使用YAML只需要在resources目录下创建一个application.yml文件即可,然后向application.yml中添加如下配置:

server:
  port: 8099
  servlet:
    context-path: /
  tomcat:
    uri-encoding: UTF-8

这一段配置等效于application.properties中的如下配置:

server.port=8099
server.servlet.context-path=/
server.tomcat.uri-encoding=UTF-8

此时可以将resources目录下的application.properties文件删除,完全使用YAML完成文件的配置。

复杂配置

YAML不仅可以配置常规属性,也可以配置复杂属性,例如下面一组配置:

my:
  name: 江南皮革
  address: 中国

像Properties配置文件一样,这一段配置也可以注入一个Bean中,代码如下:

@Component
@ConfigurationProperties(prefix = "my")
public class User
{
    private String name;
    private String address;
    private String[] favorites;

YAML还支持列表的配置,例如下面一组配置:

my:
  name: 江南皮革
  address: 中国
  favorites:
    - 数组1
    - 数组2
    - 数组3
  hobby:
    - 元素1
    - 元素2
    - 元素3

这一组配置可以注入如下Bean中:

@Component
@ConfigurationProperties(prefix = "my")
public class User
{
    private String name;
    private String address;
    private String[] favorites;
    private List<String> hobby;

YAML还支持更复杂的配置,即集合中也可以是一个对象,例如下面一组配置:

you:
  productDetailList:
    - name: 江南皮革
      address: 中国
      favorites:
        - 数组1
        - 数组2
        - 数组3
    - name: 西北牛皮
      address: 西安
      favorites:
        - 数组1
        - 数组2
        - 数组3

这组配置在集合中放的是一个对象,因此可以注入如下集合中:

@Component
@ConfigurationProperties("you")
public class Product
{
    private List<ProductDetail> productDetailList;
@Component
public class ProductDetail
{
    private String name;
    private String address;
    private List<String> favorites;

在Spring Boot中使用YAML虽然方便,但是YAML也有一些缺陷,例如无法使用@PropertySource注解加载YAML文件,如果项目中有这种需求,还是需要使用Properties格式的配置文件。

下面是项目具体情况截图

代码如下:

application.yml

server:
  port: 8099
  servlet:
    context-path: /
  tomcat:
    uri-encoding: UTF-8

my:
  name: 江南皮革
  address: 中国
  favorites:
    - 数组1
    - 数组2
    - 数组3
  hobby:
    - 元素1
    - 元素2
    - 元素3

you:
  productDetailList:
    - name: 江南皮革
      address: 中国
      favorites:
        - 数组1
        - 数组2
        - 数组3
    - name: 西北牛皮
      address: 西安
      favorites:
        - 数组1
        - 数组2
        - 数组3

 User.java

package com.shrimpking.pojo;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.List;

/**
 * @author user1
 */
@Component
@ConfigurationProperties(prefix = "my")
public class User
{
    private String name;
    private String address;
    private String[] favorites;
    private List<String> hobby;

    public User()
    {
    }

    public User(String name, String address, String[] favorites, List<String> hobby)
    {
        this.name = name;
        this.address = address;
        this.favorites = favorites;
        this.hobby = hobby;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String getAddress()
    {
        return address;
    }

    public void setAddress(String address)
    {
        this.address = address;
    }

    public String[] getFavorites()
    {
        return favorites;
    }

    public void setFavorites(String[] favorites)
    {
        this.favorites = favorites;
    }

    public List<String> getHobby()
    {
        return hobby;
    }

    public void setHobby(List<String> hobby)
    {
        this.hobby = hobby;
    }

    @Override
    public String toString()
    {
        return "User{" + "name='" + name + '\'' + ", address='" + address + '\'' + ", favorites=" + Arrays.toString(favorites) + ", hobby=" + hobby + '}';
    }
}

UserController.java

package com.shrimpking.controller;

import com.shrimpking.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author user1
 */
@RestController
public class UserController
{
    @Autowired
    private User user;

    @GetMapping("/user")
    public String user()
    {
        return user.toString();
    }
}

Product.java

package com.shrimpking.pojo;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @author user1
 */
@Component
@ConfigurationProperties("you")
public class Product
{
    private List<ProductDetail> productDetailList;

    public Product()
    {
    }

    public List<ProductDetail> getProductDetailList()
    {
        return productDetailList;
    }

    public void setProductDetailList(List<ProductDetail> productDetailList)
    {
        this.productDetailList = productDetailList;
    }

    @Override
    public String toString()
    {
        return "Product{" + "productDetailList=" + productDetailList + '}';
    }
}

ProductDetail.java

package com.shrimpking.pojo;

import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @author user1
 */
@Component
public class ProductDetail
{
    private String name;
    private String address;
    private List<String> favorites;

    public ProductDetail()
    {
    }

    public ProductDetail(String name, String address, List<String> favorites)
    {
        this.name = name;
        this.address = address;
        this.favorites = favorites;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String getAddress()
    {
        return address;
    }

    public void setAddress(String address)
    {
        this.address = address;
    }

    public List<String> getFavorites()
    {
        return favorites;
    }

    public void setFavorites(List<String> favorites)
    {
        this.favorites = favorites;
    }

    @Override
    public String toString()
    {
        return "ProductDetail{" + "name='" + name + '\'' + ", address='" + address + '\'' + ", favorites=" + favorites + '}';
    }
}

ProductController.java

package com.shrimpking.controller;

import com.shrimpking.pojo.Product;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author user1
 */
@RestController
public class ProductController
{
    @Autowired
    private Product product;

    @GetMapping("/product")
    public String test()
    {
        return product.toString();
    }
}

运行截图

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Spring Boot配置文件可以使用多种格式,其中包括YAML格式。YAML(“YAML Ain't Markup Language”)是一种人类可读的数据序列化语言,它具有简洁的语法和易于理解的结构。以下是一个简单的Spring Boot YAML配置文件示例: ```yaml server: port: 8080 spring: datasource: url: jdbc:mysql://localhost/mydatabase username: myuser password: mypassword jpa: hibernate: ddl-auto: create show-sql: true ``` 这个示例配置文件设置了Spring Boot应用程序的端口号为8080,配置了一个MySQL数据库连接,并指定了JPA的Hibernate实现,其中设置了数据库的自动DDL生成和SQL查询语句的打印。请注意,YAML文件中的缩进非常重要,它决定了键值对之间的嵌套关系。使用Spring Boot时,可以将配置文件放置在项目的src/main/resources目录下,Spring Boot将自动加载它们并解析它们。 ### 回答2: SpringBootYAML配置文件是一个非常强大的工具,可以帮助开发人员轻松地配置应用程序所需的各种属性和选项。YAML配置文件的格式很简洁,易于阅读和编写,因此被广泛使用。 创建自己的YAML配置文件非常简单,只需要安装SpringBoot并将其配置为使用YAML文件而不是标准的properties文件即可。在YAML文件中,可以使用缩进表示层次结构,即使用缩进表示父子关系。 YAML配置文件可以包含如下内容: 1. 服务器端口号、ip地址以及其他网络相关的配置项。 2. 数据库相关的配置信息,如数据库连接池、jdbc参数等。 3. 应用程序中的各种模块及其相关属性,如日志、安全、缓存、web、websocket等。 4. 系统环境相关配置项,在不同环境下,配置项可能有所不同。 5. 自定义的配置项。 SpringBootYAML配置文件还能够通过变量实现灵活性配置,在YAML文件中使用占位符代替实际值,然后在程序运行时动态替换占位符。通过这种方式,可以动态地修改配置文件中的参数,从而达到灵活性配置的目的。 总结来说,SpringBootYAML配置文件非常强大而且灵活,可以方便地配置各种组件的属性和选项,易于阅读和编写,并且支持灵活性配置。通过合理配置YAML文件,我们可以充分发挥SpringBoot的优势,使得我们的应用程序更加高效和稳定。 ### 回答3: SpringBoot配置文件有很多种,其中很重要的一种就是yaml配置文件。这种配置文件的特点是语法简单清晰、易读性强、层次结构明显,适合用于配置复杂的应用程序。下面我们来详细讲解一下SpringBoot yaml配置文件的使用方法。 一、yaml配置文件格式 yaml格式的配置文件以“:)为标志,标识键值对之间的关系,用“-”表示列表,可以嵌套子节点,支持多层级别的缩进,示例代码如下: server: port: 8080 context-path: /api spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/test username: root password: root 二、yaml配置文件的加载顺序 SpringBoot在启动时会按照一定的顺序来加载配置文件。这个顺序一般如下: - 项目根目录下的config文件夹中的application.yaml(或application.properties)文件 - 项目根目录下的application.yaml(或application.properties)文件 - 类路径下的config文件夹中的application.yaml(或application.properties)文件 - 类路径下的application.yaml(或application.properties)文件 其中,后一个文件会覆盖前一个文件中相同的配置项。 三、yaml配置文件的使用 1、基本配置spring.application.name:指定SpringBoot应用的名字。 server.port:指定应用的端口号。 logging.level.root:指定日志的输出级别。 2、加载外部配置文件 SpringBoot提供了多种方式来加载外部配置文件: - 指定命令行参数:--spring.config.location=classpath:/application.yml,classpath:/application2.yml。 - 指定系统环境变量:SPRING_CONFIG_NAME表示配置文件名,SPRING_CONFIG_LOCATION表示配置文件所在的目录或文件路径。 - 使用SpringApplication.addListeners()方法添加一个监听器,监听事件ApplicationEnvironmentPreparedEvent,然后在监听器中设置配置文件的路径。 3、配置多环境 SpringBoot支持以不同的方式配置不同的环境,如开发环境、测试环境、生产环境等。做法是在配置文件中添加特定的配置项,在启动应用时指定当前的环境。例如: spring: profiles.active: dev 上述代码表示当前的环境是dev。如果要切换到生产环境,则只需修改profiles.active的值为pro即可。此时就会加载application-prod.yml配置文件。 四、总结 本文详细介绍了SpringBoot yaml配置文件的基本语法、加载顺序、使用方法以及配置多环境的技巧。使用yaml格式的配置文件可以大幅度提高配置的可读性和可维护性,因此在开发实践中应该多加使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虾米大王

有你的支持,我会更有动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值