springboot读取并映射额外的yml配置到bean
项目结构

userPermission.yml
# 用户权限
user-permission:
api:
# 系统管理员
system_manager:
- "*:*:*"
# 应用作者
app_author:
- "test:data:query"
- "test:data:add"
# 应用用户
app_customer:
- "test:data:query"
- "test:data:add"
新建一个yml解析工厂 YmlConfigurationFactory.java
package cn.daenx.framework.YmlConfigurationFactory.config;
import org.springframework.boot.env.YamlPropertySourceLoader;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.support.DefaultPropertySourceFactory;
import org.springframework.core.io.support.EncodedResource;
import java.io.IOException;
public class YmlConfigurationFactory extends DefaultPropertySourceFactory {
@Override
public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
// 指定配置路径中的文件名
String filename = resource.getResource().getFilename() == null ? "" : resource.getResource().getFilename();
// 资源为空,则会抛出异常
resource.getInputStream();
if (resource == null || filename.endsWith(".properties")) {
// 配置文件为 properties 文件,调用原逻辑
return super.createPropertySource(name, resource);
} else if (filename.endsWith(".yml") || filename.endsWith(".yaml")) {
// yml文件 或 yaml文件,则使用yaml属性源加载器加载并返回标准属性源
return new YamlPropertySourceLoader().load(resource.getResource().getFilename(), resource.getResource()).get(0);
} else {
// 非以上情况,则直接抛出异常,提示格式错误
throw new IOException("file format error! only support: properties, yml, yaml!");
}
}
}
新建你的映射bean UserPermissionProperties.java
package cn.daenx.framework.userPermission;
import cn.daenx.framework.YmlConfigurationFactory.config.YmlConfigurationFactory;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import java.util.List;
import java.util.Map;
@Data
@Configuration
@PropertySource(
value = "classpath:userPermission.yml",
ignoreResourceNotFound = true,
encoding = "UTF-8",
factory = YmlConfigurationFactory.class
)
@ConfigurationProperties(prefix = "user-permission")
public class UserPermissionProperties {
private Map<String, List<String>> api;
}
使用
@Resource
private UserPermissionProperties userPermissionConfig;
/**
* 测试接口
*
* @return
*/
@GetMapping("/test0")
public Result test0() {
Map<String, List<String>> api = userPermissionConfig.getApi();
System.out.println(api);
return Result.ok("查询成功");
}
springboot读取并映射额外的yml配置到bean的更多相关文章
- springboot application.yml配置学习
一.背景 为了更好的使用springboot,所以看一下application.yml配置这块.主要是看数据绑定这块. 主要参考:https://www.hangge.com/blog/cache/d ...
- springboot 读取 yml 配置的几种方式
前言:在springboot 项目中一般默认的配置文件是application.properties,但是实际项目中我们一般会使用application.yml 文件,下面就介绍一下在springbo ...
- Spring Boot 之注解@Component @ConfigurationProperties(prefix = "sms") 使用@ConfigurationProperties读取yml配置
从spring-boot开始,已经支持yml文件形式的配置,@ConfigurationProperties的大致作用就是通过它可以把properties或者yml配置直接转成对象 @Componen ...
- 【转】SpringBoot学习笔记(7) SpringBoot整合Dubbo(使用yml配置)
http://blog.csdn.net/a67474506/article/details/61640548 Dubbo是什么东西我这里就不详细介绍了,自己可以去谷歌 SpringBoot整合Dub ...
- Springboot整合Spring Cloud Kubernetes读取ConfigMap,支持自动刷新配置
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Docker & Kubernetes相关文章:容器技术 之前介绍了Spring Cloud Config的用法,但 ...
- SpringBoot学习(三)-->Spring的Java配置方式之读取外部的资源配置文件并配置数据库连接池
三.读取外部的资源配置文件并配置数据库连接池 1.读取外部的资源配置文件 通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值,具体用法: @Configuration ...
- 每日笔记---使用@ConfigurationProperties读取yml配置
每日笔记---使用@ConfigurationProperties读取yml配置 参考地址 https://www.cnblogs.com/mycs-home/p/8352140.html 1.添加 ...
- SpringBoot 使用yml配置 mybatis+pagehelper+druid+freemarker实例
SpringBoot 使用yml配置 mybatis+pagehelper+druid+freemarker实例 这是一个简单的SpringBoot整合实例 这里是项目的结构目录 首先是pom.xml ...
- SpringBoot的yml配置
Spring Boot的yml配置 #开发配置 spring: data: solr: host: http://localhost:6789/solr/mote mvc: view: # 页面默认前 ...
- Springboot读取配置文件的两种方法
第一种: application.yml配置中的参数: zip: Hello Springboot 方法读取: @RestController public class ControllerTest ...
随机推荐
- 【Jmatpro 10.0】根据材料牌号输出应力-应变曲线
1.前提条件 Jmatpro 软件 一个材料牌号或者材料成分数据 2. 步骤 以 X15Cr 13牌号金属为案例 材料数据来自:材数库 运行jmatpro软件 选择 material type:sta ...
- AI 大模型:现状、挑战与未来多维度发展趋势
在科技浪潮的推动下,以 Deepseek 为代表的 AI 大模型正以颠覆性力量重塑产业格局.从金融风控到工业质检,从智慧医疗到智能教育,这些轻量化的 AI 工具不仅打破了传统工作模式的桎梏,更构建起一 ...
- 【Bug记录】uniapp开发时pages.json和manifest.json注释报错解决方案
pages.json和manifest.json注释报错问题解决 增强 pages.json和 manifest.json 开发体验 json文件写注释 用 VsCode 开发 uni-app 项目时 ...
- 数据、信息、知识、智慧:AI时代我们该如何思考?
时代的浪潮滚滚向前,AI技术的演进正悄然改变着我们认知世界和创造价值的方式.从数据.信息到知识.智慧,从大数据到大模型,从单一智能体到多智能体协作,这是一场深刻的认知革命,也是生产力解放的新纪元. A ...
- 运维 —— IMP-00030: failed to create file import_sys for write
IMP-00030: failed to create file import_sys for writeIMP-00000: Import terminated unsuccessfully原因:操 ...
- 虚拟机使用ESXi主机物理硬盘的办法
虚拟机使用ESXi主机物理硬盘的办法 weixin_33928137 于 2018-06-19 15:22:06 发布 868 收藏 1文章标签: 运维版权 VMware Workstation的虚拟 ...
- 在 JavaScript 中,判断一个对象是否为空有几种方法。
使用 Object.keys() 方法检查对象的键值对数量: function isObjectEmpty(obj) { return Object.keys(obj).length === 0; } ...
- MySQL 事务隔离级别:社交恐惧症的四个阶段
MySQL 事务隔离级别:社交恐惧症的四个阶段 在数据库的世界里,数据们也有社交问题!事务隔离级别就是控制它们互相看到对方的程度... 什么是事务隔离? 想象一下,数据库是一个繁忙的餐厅,每个事务都是 ...
- Docker Commonds
脑子不够用,记录下自己所学所用的命令,备忘...不断补充. 最最基本的命令 查看 docker 信息 docker info 查看 docker 版本及相关信息 docker version 仅查看 ...
- frameset frame 实例和用法
转
看这个比较好