Spring在多租户环境中为占位符配置application.properties

Posted

技术标签:

【中文标题】Spring在多租户环境中为占位符配置application.properties【英文标题】:Spring configure application.properties for placeholder in multitenant environment 【发布时间】:2019-08-08 17:12:02 【问题描述】:

我有一个多租户环境,所以我需要在运行时更改 application.properties 的一些路径以使用特定租户的文件夹。 例如在我的应用程序属性中:

image.avatars=C:/Users/Public/Pictures/Sample Pictures/$tenant/Avatars/

在我的课堂上我使用

@Autowired
private Environment env;
private static final String DIRECTORY_USER_IMAGE = "image.avatars";
.....Method
    env.getRequiredProperty(DIRECTORY_USER_IMAGE)

我阅读了有关env.resolveRequiredPlaceholders 的信息,但我不明白如何在我的情况下使用它,因为它只有一个参数,例如env.resolveRequiredPlaceholders(TenantContext.getCurrentTenant())。 有没有一种简单的方法来更改占位符而无需操作字符串(带替换)? 我认为 env.resolveRequiredPlaceholders 需要属性的名称和占位符的可变参数,但它是不同的。 谢谢

【问题讨论】:

【参考方案1】:

您可以使用String.format()

只需在属性中使用%s

image.avatars=C:/Users/Public/Pictures/Sample Pictures/%s/Avatars/

代码中的

String.format(imageavatars, tenant)

【讨论】:

【参考方案2】:

这可能不是你想要的(因为我很难理解你的场景),但是放什么

image.avatars=C:/Users/Public/Pictures/Sample Pictures/$tenant/Avatars/

在您的application.properties 中,并使用

@Value("$image.avatars")
private String DIRECTORY_USER_IMAGE;

在您的 bean/服务中并使用命令行参数运行应用程序,例如

--tenant="FooBar"

这将为DIRECTORY_USER_IMAGE 提供值C:/Users/Public/Pictures/Sample Pictures/FooBar/Avatars/,您可以根据需要更改CLI 参数。但请注意,DIRECTORY_USER_IMAGE 不再是 static final

我希望我能满足您的要求。

【讨论】:

以上是关于Spring在多租户环境中为占位符配置application.properties的主要内容,如果未能解决你的问题,请参考以下文章

在运行时使用 intellij 在 Spring boot application.yml 文件中注入占位符值

Spring Config Server - 解析占位符+环境变量

如何将 OS 环境变量连接到 Spring Web 应用程序项目中 application.properties 中的占位符?

Spring Boot 配置属性的未解决占位符验证

Spring是怎么解析Xml配置文件路径中的占位符的

spring boot 2-文件配置YAML语法文件处理器文件占位符profile