在嵌套映射中重用spring配置属性

时间:2020-03-09 12:00:58

标签: java spring spring-boot

我有一个支持多租户的Spring Boot应用程序。我希望支持一堆自定义配置属性的全局和按租户配置。对于每个属性,可以配置一个全局值,但是对于特定的租户,该值可以被覆盖。

当前,我只使用一些带有@ConfigurationProperties注释的类来具有全局属性。 例如

    @ConfigurationProperties("props1")
    class Props1 {
        ...
    }

    @ConfigurationProperties("props2")
    class Props2 {
        ...
    }

    @ConfigurationProperties("props3")
    class Props3 {
        ...
    }

我希望能够配置如下属性:

props1.a=...
props1.b=...

props2.x=...
props2.y=...

props3.z=...

tenant.some-tenant-id.props1.b=...
tenant.some-tenant-id.props3.z=...

tenant.some-other-tenant-id.props2.x=...

我正在考虑添加另一个@ConfigurationProperties类,例如前缀tenant,并为每个现有类添加一个Map,其中键为租户名称,例如:

@ConfigurationProperties("tenant")
class TenantSpecificProps {
   private Map<String, Props1> props1;
   private Map<String, Props2> props2;
   private Map<String, Props3> props3;
   ...
}

但是,我担心对于地图重新使用带有@ConfigurationProperties注释的类可能会在以后导致问题,因为这不是在Spring中正常使用这些类的方式。另外,我需要手动合并全局值和每个租户值(每个租户覆盖全局值)。

这是一种有效的方法吗,和/或有没有更惯用的方法呢?

0 个答案:

没有答案