¶Ô±ÈÐÂÎļþ |
| | |
| | | /* |
| | | * Copyright (c) 2018-2028, DreamLu All rights reserved. |
| | | * |
| | | * Redistribution and use in source and binary forms, with or without |
| | | * modification, are permitted provided that the following conditions are met: |
| | | * |
| | | * Redistributions of source code must retain the above copyright notice, |
| | | * this list of conditions and the following disclaimer. |
| | | * Redistributions in binary form must reproduce the above copyright |
| | | * notice, this list of conditions and the following disclaimer in the |
| | | * documentation and/or other materials provided with the distribution. |
| | | * Neither the name of the dreamlu.net developer nor the names of its |
| | | * contributors may be used to endorse or promote products derived from |
| | | * this software without specific prior written permission. |
| | | * Author: DreamLu 墿¥æ¢¦ (596392912@qq.com) |
| | | */ |
| | | package org.springblade.core.tool.yml; |
| | | |
| | | import org.springblade.core.tool.utils.StringUtil; |
| | | import org.springframework.boot.env.OriginTrackedMapPropertySource; |
| | | import org.springframework.boot.env.YamlPropertySourceLoader; |
| | | import org.springframework.core.env.MapPropertySource; |
| | | import org.springframework.core.env.PropertySource; |
| | | import org.springframework.core.io.Resource; |
| | | import org.springframework.core.io.support.DefaultPropertySourceFactory; |
| | | import org.springframework.core.io.support.EncodedResource; |
| | | import org.springframework.lang.Nullable; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.Collections; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Stream; |
| | | |
| | | /** |
| | | * ymlé
ç½®å è½½ |
| | | * |
| | | * @author lcm |
| | | */ |
| | | public class YmlPropertyLoaderFactory extends DefaultPropertySourceFactory { |
| | | |
| | | @Override |
| | | public PropertySource<?> createPropertySource(@Nullable String name, EncodedResource encodedResource) throws IOException { |
| | | if (encodedResource == null) { |
| | | return emptyPropertySource(name); |
| | | } |
| | | Resource resource = encodedResource.getResource(); |
| | | String fileName = resource.getFilename(); |
| | | List<PropertySource<?>> sources = new YamlPropertySourceLoader().load(fileName, resource); |
| | | if (sources.isEmpty()) { |
| | | return emptyPropertySource(fileName); |
| | | } |
| | | // yml æ°æ®åå¨ï¼åæä¸ä¸ª PropertySource |
| | | Map<String, Object> ymlDataMap = new HashMap<>(32); |
| | | for (PropertySource<?> source : sources) { |
| | | ymlDataMap.putAll(((MapPropertySource) source).getSource()); |
| | | } |
| | | return new OriginTrackedMapPropertySource(getSourceName(fileName, name), ymlDataMap); |
| | | } |
| | | |
| | | private static PropertySource<?> emptyPropertySource(@Nullable String name) { |
| | | return new MapPropertySource(getSourceName(name), Collections.emptyMap()); |
| | | } |
| | | |
| | | private static String getSourceName(String... names) { |
| | | return Stream.of(names) |
| | | .filter(StringUtil::isNotBlank) |
| | | .findFirst() |
| | | .orElse("BladeYmlPropertySource"); |
| | | } |
| | | |
| | | } |