利用PropertyPlaceholderHelper实现配置化的Param动态获取Value

一般我们使用@Value去获取配置,比如apollo,nocas等热更新中间件,但某些业务场景,我们的 param是配置化的,但Value的获取却有相关的业务逻辑,不是简单的某个值,这个时候就可以使用到PropertyPlaceholderHelper。

package org.example;

import org.junit.Test;
import org.springframework.util.PropertyPlaceholderHelper;

import java.util.Objects;
import java.util.Properties;

public class PropertyPlaceholderHelperTest {

    PropertyPlaceholderHelper helper = new PropertyPlaceholderHelper("${", "}");

    /**
     * 单个变量
     */
    @Test
    public void test() {

        String text = "name=${name}";
        Properties props = new Properties();
        props.setProperty("name", "admin");
        String result = helper.replacePlaceholders(text, props);
        boolean equals = Objects.equals(result, "name=admin");
        System.out.println(equals);
    }

    /**
     * 多个变量
     */
    @Test
    public void testMore() {
        String text = "name=${name},age=${age}";
        Properties props = new Properties();
        props.setProperty("age", "18");
        props.setProperty("name", "admin");
        String result = helper.replacePlaceholders(text, props);
        boolean equals = Objects.equals(result, "name=admin,age=18");
        System.out.println(equals);
    }

    /**
     * 递归
     */
    @Test
    public void testRecursion() {
        String text = "message=${message}";
        Properties props = new Properties();
        props.setProperty("message", "hi,${name}");
        props.setProperty("name", "admin");
        String result = helper.replacePlaceholders(text, props);
        Objects.equals(result, "message=hi,admin");

    }

    /**
     * 其他符号
     */
    @Test
    public void testOtherMark() {
        helper = new PropertyPlaceholderHelper("$#", "#");
        String text = "name=$#name#,age=$#age#";
        Properties props = new Properties();
        props.setProperty("name", "admin");
        props.setProperty("age", "18");
        String result = helper.replacePlaceholders(text, props);
        Objects.equals(result, "name=admin,age=18");
    }


    /**
     * 参数动态获取
     * 应用场景:解析@pathvariable形式的请求的url(后面会写一个配置化的url调用,
比如某业务场景要调用不同的url,不同入参,不同出参,不同的请求方式,不同的请求头等)
     */
    @Test
    public void testDynamicValue() {
        String text = "name=${name},age=${age}";
        // placeholderResolver 根据占位符去获取动态值
        String result = helper.replacePlaceholders(text, paramName -> {
            // 这里的逻辑可交给SpringBean去动态调一些业务逻辑获取,这里简单的写个demo
            switch (paramName) {
                case "name":
                    return "admin";
                case "age":
                    return "18";
            }
            return null;
        });
        System.out.println(result);
        boolean equals = Objects.equals(result, "name=admin,age=18");
        System.out.println(equals);
    }


}

参考:PropertyPlaceholderHelper 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值