springboot配置注入增强(四)使用框架实现自定义数据源和自定义属性解析

1.代码

框架代码已经上传到gitee中

代码链接:https://gitee.com/summer-cat001/config-enhance

jar包:https://gitee.com/summer-cat001/config-enhance/tree/master/build/libs

2.使用方式

2.1 引入jar包

引入本地jar包或者把jar包上传到自己的maven仓库中

或者把代码下载下来改一改包名或加点自己的代码,然后通过build.gradle上传到自己的maven仓库中,只要修改账号密码和仓库地址,然后通过publish命令上传 ,脚本中根据version中是否以-SNAPSHOT结尾来判断上传到哪个仓库中

2.2 自定义属性解析方法

实现EnhancePropertyResolver接口,并添加到spring.factories中com.config.enhance.resolver.EnhancePropertyResolver中,多个用逗号分隔

复制代码
package com.config.enhance.test2.enhance;

import com.config.enhance.resolver.EnhancePropertyResolver;


public class EnhancePropertyResolverTest extends EnhancePropertyResolver {

    @Override
    public String resolveStringValue(String strVal) {
        if (strVal.contains("decode")) {
            strVal += "----自定属性解析";
        }
        return strVal;
    }
}

这样就可以了,下面看下运行结果

2.3 自定义增加属性数据源

自定义EnhancePropertySource接口,并添加到spring.factories中com.config.enhance.env.EnhancePropertySource中,多个用逗号分隔

复制代码
package com.config.enhance.test2.enhance;

import com.config.enhance.env.EnhancePropertySource;
import org.springframework.core.env.Environment;
import org.springframework.core.env.MapPropertySource;
import org.springframework.core.env.PropertySource;

import java.util.HashMap;
import java.util.Map;


public class EnhancePropertySourceTest implements EnhancePropertySource<Map<String, Object>> {

    @Override
    public PropertySource<Map<String, Object>> buildPropertySource(Environment environment) {
        Map<String, Object> source = new HashMap<>();
        source.put("user.123.sex", "自定义数据源");
        return new MapPropertySource("enhanceTestSource", source);
    }
}

这样就可以了,下面看下运行结果

当然自定义的数据源也会被自定义的解析方法进行解析如

结果为

3.原理

本质上用了上一篇中介绍方式进行的开发,其中自定义解析用了上一篇中3.1+3.2组合的方式,先尝试进行3.1,如果不成功在用3.2兜底

添加了自动配置com.config.enhance.autoconfigure.EnhanceAutoConfiguration,通过@Import将扩展点加入到springboot的启动流程中

相关推荐
云-缩影3 小时前
拆解 AI 图像生成应用的后端架构:ECS、OSS 和大模型 API 怎么配合
java·spring boot·后端
AI开源软件5 小时前
SpringBoot3+Vue3 财务管理系统如何设计:从业务单据到总账的模块划分
spring boot·vue3·领域建模·会计凭证·ruoyi office·业财协同·财务系统设计
工业HMI实战笔记9 小时前
印刷电路板HMI:SMT贴装的元件定位界面
制造·设计规范·设计语言·1024程序员节
Mikko710 小时前
Redis 连接数满了服务端有错误信息吗?连接数不增加却命令超时?6.2 实测连接池、超时与大 key 怎么判定
java·spring boot·redis·后端
Martina_032115 小时前
AI生成3D模型一合并网格,材质就串色?用6步检查材质槽、UV与图集重映射
图像处理·人工智能·3d·材质·uv·游戏策划·1024程序员节
橙光成长15 小时前
android-ad-cleaner:android免 Root 批量关闭系统开屏与营销推送
android·1024程序员节
计算机毕设定制辅导-无忧学长15 小时前
《基于微信小程序健康习惯激励系统设计与实现》
java·spring boot·mysql·微信小程序·uniapp·健康习惯激励系统
vipxieliang16 小时前
ValidX 正则表达式预编译优化:Pattern 复用策略
java·spring boot·后端
余槐i18 小时前
Spring Boot 3.2 偶发500无日志:线程池复用导致请求上下文丢失
spring boot·redis·后端·mysql·性能优化