У меня есть приложение Spring Boot, которое поддерживает мультитенантность. Я sh буду поддерживать глобальную и индивидуальную конфигурацию множества пользовательских свойств конфигурации. Для каждого свойства можно настроить глобальное значение, но для определенного c арендатора это значение может быть переопределено.
В настоящее время у меня есть только глобальные свойства, использующие некоторые классы, помеченные @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. Кроме того, мне нужно объединить глобальные значения и значения для каждого арендатора (для каждого владельца, переопределяющего глобальные значения).
Это правильный подход и / или существует более идиоматический c способ выполнения это?