Heim > Java > javaLernprogramm > Wie lädt SpringBoot Wörterbuchdaten in YML-Dateien?

Wie lädt SpringBoot Wörterbuchdaten in YML-Dateien?

WBOY
Freigeben: 2023-05-11 09:34:05
nach vorne
993 Leute haben es durchsucht

Konfigurieren Sie die Wörterbuchdaten in der YML-Datei und laden Sie die Daten in die Karte, indem Sie die YML laden.

Die YML-Konfiguration in Spring Boot und auf die Konfiguration in anderen YML verweisen. # Erstellen Sie eine neue application-xxxapplication-xxx

必须以application开头的yml文件, 多个文件用 "," 号分隔,不能换行

项目结构文件

Wie lädt SpringBoot Wörterbuchdaten in YML-Dateien?

application.yml

server:
  port: 8088
  application:
    name: VipSoft Env Demo


spring:
  profiles:
    include:
      dic      # 在配置文件目录(如:resources)下新建application-xxx 开头的yml文件, 多个文件用 "," 号分隔,不能换行

#性别字典
user-gender:
  0: 未知
  1: 男
  2: 女
Nach dem Login kopieren

application-dic.yml

将字典独立到单独的yml文件中

#支付方式
pay-type:
  1: 微信支付
  2: 货到付款
Nach dem Login kopieren

resources 目录下,创建META-INF目录,创建 spring.factories

im Konfigurationsdateiverzeichnis (z. B. „resources“). Mehrere Dateien müssen mit „application“ und „application“ getrennt werden kann nicht verpackt werden. 000/887/ 227/168376884985687.png" alt="Wie lädt SpringBoot Wörterbuchdaten in YML-Dateien" />

application.yml

# Environment Post Processor
org.springframework.boot.env.EnvironmentPostProcessor=com.vipsoft.web.utils.ConfigUtil
Nach dem Login kopieren

application-dic.yml

Teilen Sie das Wörterbuch in eine separate YML-Datei auf.

package com.vipsoft.web.utils;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.context.properties.bind.BindResult;
import org.springframework.boot.context.properties.bind.Binder;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.PropertySource;
import org.springframework.util.Assert;

public class ConfigUtil implements EnvironmentPostProcessor {

    private static Binder binder;

    private static ConfigurableEnvironment environment;

    public static String getString(String key) {
        Assert.notNull(environment, "environment 还未初始化!");
        return environment.getProperty(key, String.class, "");
    }

    public static <T> T bindProperties(String prefix, Class<T> clazz) {
        Assert.notNull(prefix, "prefix 不能为空");
        Assert.notNull(clazz, "class 不能为空");
        BindResult<T> result = ConfigUtil.binder.bind(prefix, clazz);
        return result.isBound() ? result.get() : null;
    }

    /**
    * 通过 META-INF/spring.factories,触发该方法的执行,进行环境变量的加载
    */
    @Override
    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
        for (PropertySource<?> propertySource : environment.getPropertySources()) {
            if (propertySource.getName().equals("refreshArgs")) {
                return;
            }
        }
        ConfigUtil.environment = environment;
        ConfigUtil.binder = Binder.get(environment);
    }
}
Nach dem Login kopieren

Erstellen Sie im Verzeichnis resources das Verzeichnis META-INF und erstellen Sie die Datei spring.factories,

Spring Factories ist ein Mechanismus, der Java SPI ähnelt. Er konfiguriert den Implementierungsklassennamen der Schnittstelle in META-INF/spring.factories Datei, und dann in Das Programm liest diese Konfigurationsdateien und instanziiert sie.

Der Inhalt ist wie folgt:

package com.vipsoft.web.vo;


public class DictVO implements java.io.Serializable {
    private static final long serialVersionUID = 379963436836338904L;
    /**
     * 字典类型
     */
    private String type;
    /**
     * 字典编码
     */
    private String code;
    /**
     * 字典值
     */
    private String value;

    public DictVO(String code, String value) {
        this.code = code;
        this.value = value;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}
Nach dem Login kopieren

ConfigUtil

package com.vipsoft.web.controller;

import com.vipsoft.web.utils.ConfigUtil;
import com.vipsoft.web.vo.DictVO;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

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


@RestController
public class DefaultController {
    @GetMapping(value = "/")
    public String login() {
        return "VipSoft Demo !!!";
    }

    @GetMapping("/list/{type}")
    public List<DictVO> listDic(@PathVariable("type") String type) {
        LinkedHashMap dict = ConfigUtil.bindProperties(type.replaceAll("_", "-"), LinkedHashMap.class);
        List<DictVO> list = new ArrayList<>();
        if (dict == null || dict.isEmpty()) {
            return list;
        }
        dict.forEach((key, value) -> list.add(new DictVO(key.toString(), value.toString())));
        return list;
    }
}
Nach dem Login kopieren
Wie lädt SpringBoot Wörterbuchdaten in YML-Dateien?DictVo

package com.vipsoft.web;

import com.vipsoft.web.controller.DefaultController;
import com.vipsoft.web.utils.ConfigUtil;
import com.vipsoft.web.vo.DictVO;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class DicTest {
    @Autowired
    DefaultController defaultController;

    @Test
    public void DicListTest() throws Exception {
        List<DictVO> pay_type = defaultController.listDic("pay-type");
        pay_type.forEach(p -> System.out.println(p.getCode() + " => " + p.getValue()));


        List<DictVO> user_gender = defaultController.listDic("user-gender");
        user_gender.forEach(p -> System.out.println(p.getCode() + " => " + p.getValue()));
    }


    @Test
    public void getString() throws Exception {
        String includeYml = ConfigUtil.getString("spring.profiles.include");
        System.out.println("application 引用了配置文件 =》 " + includeYml);
    }
}
Nach dem Login kopieren

DefaultControllerrrre ee# ? #🎜 🎜## 🎜🎜#

Das obige ist der detaillierte Inhalt vonWie lädt SpringBoot Wörterbuchdaten in YML-Dateien?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage