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

Spring configure application.properties for placeholder in multitenant environment

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

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

在我的 class 我使用

@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 需要属性名称和占位符的可变参数,但它是不同的。 谢谢

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

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

在您的 application.properties 中,并使用

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

在您的 bean/service 和 运行 应用程序中使用

这样的命令行参数
--tenant="FooBar"

这会给 DIRECTORY_USER_IMAGEC:/Users/Public/Pictures/Sample Pictures/FooBar/Avatars/,您可以根据需要更改 CLI 参数。但请注意 DIRECTORY_USER_IMAGE 不再是 static final

希望我能满足您的要求。

您可以使用 String.format().

只需在属性中使用%s

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

以及代码中的

String.format(imageavatars, tenant)