STACKJAVA

YAML file là gì? Đọc file YAML/yml với Spring Boot

YAML file là gì? Đọc file YAML/yml với Spring Boot.

1. YAML file là gì?

YAML (YAML Ain’t Markup Language) là một lại ngôn ngữ tương tự JSON được thiết kế với mục đích để người và máy cùng đọc được.

Ví dụ:

message: Hello

menus:
  - title: Home
    name: Home
    path: /

  - title: Login
    name: Login
    path: /login

YAML file thường được dùng để làm các file cấu hình (config), lưu giá trị… Nhìn chung mục đích của file YAML giống với file .properties

2. File YAML trong Spring Boot.

Trong Spring Boot file YAML (.yml) được dùng để làm file config (tương đươn với file .properties).

Ta có thể dùng file YAML hoặc file Properties hoặc kết hợp cả 2. (Xem lại: Đọc file .properties với Spring Boot)

Việc đọc file YAML trong Spring Boot giống với việc đọc file Properties. Chúng ta cũng sử dụng các annotation @Value@ConfigurationProperties

Ví dụ đọc file YAML:

File yaml:

message: Hello

menus:
  - title: Home
    name: Home
    path: /

  - title: Login
    name: Login
    path: /login
    
    
website: stackjava.com
facebook: facebook.com/stackjava
name: kai

File đọc / load thông tin cấu hình:

package stackjava.com.springboothello.bean;

import java.util.ArrayList;
import java.util.List;

import javax.validation.constraints.NotEmpty;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

@Component
@ConfigurationProperties
@Validated
public class GlobalConfig {

  @NotEmpty
  private String name;

  private String website;

  private String facebook;

  private List<Menu> menus = new ArrayList<>();

  // getter - setter

}
package stackjava.com.springboothello.bean;

public class Menu {
  private String name;
  private String path;
  private String title;

  @Override
  public String toString() {
    return "Menu{" + "name='" + name + '\'' + ", path='" + path + '\'' + ", title='" + title + '\'' + '}';
  }

  // getter - setter
}

File Controller:

package stackjava.com.springboothello.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import stackjava.com.springboothello.bean.GlobalConfig;

@Controller
public class BaseController {

  @Autowired
  private GlobalConfig globalConfig;

  @Value("${message}")
  private String message;

  @RequestMapping("/")
  public String index(Model model) {
    model.addAttribute("name", globalConfig.getName());
    model.addAttribute("website", globalConfig.getWebsite());
    model.addAttribute("facebook", globalConfig.getFacebook());
    model.addAttribute("message", message);
    model.addAttribute("menus", globalConfig.getMenus());
    return "index";
  }
}

File view:

<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Spring Boot</title>
</head>
<body>
  <h1>Spring Boot yaml file</h1>
  Menu:
  <ul th:if="${menus != null && !menus.empty}">
    <li th:each="menu: ${menus}" th:text="${menu}"></li>
  </ul>

  <table>
    <tr>
      <td>Name:</td>
      <td><p th:text="${name}">Default Name</p></td>
    </tr>
    <tr>
      <td>Website:</td>
      <td><p th:text="${website}">Default Website</p></td>
    </tr>
    <tr>
      <td>Facebook:</td>
      <td><p th:text="${facebook}">Default Facebook</p></td>
    </tr>
    <tr>
      <td>Message:</td>
      <td><p th:text="${message}">Default Message</p></td>
    </tr>

  </table>
</body>
</html>

Kết quả:

Okay, Done!

Download code ví dụ trên tại đây:

YAML file là gì? Đọc file YAML/yml với Spring Boot

References:

https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-external-config-application-property-files