SpringBoot在yml中自定义复杂配置

SpringBoot在yml中自定义复杂配置

由于业务需要,需要我们在yml配置中自定义自己的配置。

但是我们的配置有时候需要是一个String集合,或者是一个对象集合,那么此时应该如何在yml中进行配置和在代码中进行读取呢。

看下面的demo

wechat:
  url:
    unifiedorder: https://api.mch.weixin.qq.com/pay/unifiedorder
    unifiedorder-callback: 支付回调地址,需要是https的域名才行
  apps:
    - appid: 自己的appid1
      mch_id: 自己的mchid
      app_secret: 账户对应的acc_secret
      trade_type: APP, JSAPI
      cert: p12证书存放地址
      sign_type: MD5
    - appid: 自己的appid2
      mch_id: 自己的mchid
      app_secret: 账户对应的acc_secret
      trade_type: APP, JSAPI
      cert: p12证书存放地址
      sign_type: MD5
@Data
@Component
// 配置名称的统一前缀
@ConfigurationProperties(prefix = "wechat")
public class WechatConfig {

    @Value("${wechat.url.unifiedorder}")
    private String unifiedOrderUrl;

    @Value("${wechat.url.unifiedorder-callback}")
    private String unifiedOrderCallbackUrl;

    private List<WechatAppConfig> apps;

    // 将多个微信账户的配置转为Map<String, WechatAppConfig>对象
    // key: appId
    // val: WechatAppConfig对象
  	// 哪里需要的时候,注入该bean即可使用
    @Bean(name = "WechatApps")
    public Map<String, WechatAppConfig> getWechatAppConfigMap () {
        Map<String, WechatAppConfig> map = new HashMap<>();
        for (WechatAppConfig app : apps) {
            map.put(app.getAppid(), app);
        }
        return map;
    }

}
@Data
public class WechatAppConfig {

    private String appid;
    private String mchId;
    private String appSecret;
    private String cert;
    // 配置中trade_type字段要用","分割
    private List<String> tradeType;
    private String signType;

}
@Service
@Slf4j
public class WechatService {

    @Autowired
    private WechatConfig wechatConfig;
    @Autowired
    private Map<String, WechatAppConfig> wechatApps;
  
}

此时,即可在代码中直接使用自己注入的多种配置了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

难过的风景

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值