Springboot @ConfigurationProperties 到 Map 的 Map 或(嵌套 Map/MultiKeyMap)

发布于 2025-01-11 09:00:36 字数 1212 浏览 1 评论 0原文

我试图通过 yaml 文件保留域上的一些业务配置。

yml 配置文件的结构:

bank:
    accountType1:
        debit:
            - Product1
            - Product2
        hybrid:
            - ProductX
            - ProductY
    accountType2:
        debit:
            - Product1
            - Product2
            - Product3
        hybrid:
            - ProductX
            - ProductY
            - ProductZ

我在域上有以下枚举。

enum AccountType{ ACCOUNT_TYPE1, ACCOUNT_TYPE2}
enum Feature{ DEBIT, HYBRID}
enum Products { Product1, Product2, Product3, ProductX, ProductY, ProductZ }

我想寻求帮助以将这些业务配置作为 MultikeyMap 或嵌套映射,但使用枚举作为键。例如:

Map<AccountType, Map<Feature, List<Products>>

基本上我希望配置执行以下查找:

if AccountType = accountType1 & Feature = debit, then return [Product1,Product2]

我找不到通过配置文件优雅地执行此操作的方法,因为它总是初始化为 null

@ConfigurationProperties(prefix="bank")
public class ProductResolver {
Map<AccountType, Map<Feature, List<Products>> configMap 
  // NestedMap, Apache MultiKeymap or something similar either should be ok for me
}

任何专家,请指导我吗?

I'm trying to retain a few business configs on the domain through yaml file.

Structure of yml config file:

bank:
    accountType1:
        debit:
            - Product1
            - Product2
        hybrid:
            - ProductX
            - ProductY
    accountType2:
        debit:
            - Product1
            - Product2
            - Product3
        hybrid:
            - ProductX
            - ProductY
            - ProductZ

I have the below enums for on the domain.

enum AccountType{ ACCOUNT_TYPE1, ACCOUNT_TYPE2}
enum Feature{ DEBIT, HYBRID}
enum Products { Product1, Product2, Product3, ProductX, ProductY, ProductZ }

I would like to seek help to get these business configs as a MultikeyMap, or a nested map, but using enums as keys. For eg:

Map<AccountType, Map<Feature, List<Products>>

Basically I would like the config to perform the following lookup:

if AccountType = accountType1 & Feature = debit, then return [Product1,Product2]

I couldn't find a way to do this elegantly via config files, as it always initialises to null

@ConfigurationProperties(prefix="bank")
public class ProductResolver {
Map<AccountType, Map<Feature, List<Products>> configMap 
  // NestedMap, Apache MultiKeymap or something similar either should be ok for me
}

Any experts, please could you guide me?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

十二 2025-01-18 09:00:36

如果您可以稍微更改映射,如下所示:

bank:
 map:
  accountType1:
    debit:
     - Product1
     - Product2
    hybrid:
     - ProductX
     - ProductY

那么下面的配置实际上对我来说效果很好:

@ConfigurationProperties(prefix = "bank")
public class NewProps {

    private Map<AccountType, Map<String, List<Product>>> map = new HashMap<>();

    public Map<AccountType, Map<String, List<Product>>> getMap() {
        return map;
    }

    public void setMap(Map<AccountType, Map<String, List<Product>>> map) {
        this.map = map;
    }
}

If you can slightly change you mappings, like this:

bank:
 map:
  accountType1:
    debit:
     - Product1
     - Product2
    hybrid:
     - ProductX
     - ProductY

Then below config actually worked for me just fine:

@ConfigurationProperties(prefix = "bank")
public class NewProps {

    private Map<AccountType, Map<String, List<Product>>> map = new HashMap<>();

    public Map<AccountType, Map<String, List<Product>>> getMap() {
        return map;
    }

    public void setMap(Map<AccountType, Map<String, List<Product>>> map) {
        this.map = map;
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文