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

时间:2019-03-18 10:48:58

标签: java spring placeholder application.properties

我有一个多租户环境,因此我需要在运行时更改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())这样的参数,因此我不知道如何使用它。
有没有一种简单的方法来更改占位符而无需操纵String(带有replace)?
我以为env.resolveRequiredPlaceholders需要属性的名称和占位符的变量,但这是不同的。 谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用String.format()

只需在属性中使用%s

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

还有代码中的

String.format(imageavatars, tenant)

答案 1 :(得分:0)

这可能不完全是您想要的(因为我很难理解您的情况),但是放置

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

希望我能满足您的要求。