如何将 SOPS 文件中的值加载到 Java Spring Boot 应用程序中

问题描述 投票:0回答:1

我有一个 Java 21 Spring Boot 3.2 应用程序,需要加载一堆属性。在应用程序中,有几个文件使用:

@Value("${some.value}")
private String someValue;

我还有一个 SOPS 文件,其中包含几个键/值,我需要 Spring Boot 应用程序才能加载这些键/值。文件内容的格式如下:

some.value = myValue

如何将值加载到 Spring Boot 应用程序中?

这是为了当地发展。现在这些值正在被复制到 application-local.properties 文件中以供本地开发。但之后需要删除该文件,因为拥有这两个文件是没有意义的,而且 SOPS 文件已加密。有没有办法将值加载到环境中?

谢谢。

java spring-boot encryption key-value
1个回答
0
投票

我通过创建一个

implements ApplicationContextInitializer<ConfigurableApplicationContext>
类并仅在
local
弹簧配置文件处于活动状态时通过创建一个
application-local.properties
来调用它来解决这个问题,我已将其添加到我的
.gitignore
中,其中至少包含:
context.initializer.classes=com.your.path.to.class

initialize
方法中,我创建一个
ProcessBuilder
,并使用命令来验证
&&
将 sops 文件解密到标准输出。我捕获输出并将其解析为适合
MapPropertySource
applicationContext.getEnvironment().getPropertySources().addLast(props)

最后添加允许您通过忽略的本地属性文件覆盖在 sops 中找到的任何属性。此外,与许多其他方法不同,此方法允许来自 sops 的属性成为

@Value
注释的来源。

最糟糕的部分是必须编写解析解密的

.properties
文件的代码。考虑注释
#
!
、多行支持以及将
\n
等特殊字符处理为非文字。

我确实看到了一个名为

mrvisser/prop-doc
的 git 存储库,它可能会为你做这个?

© www.soinside.com 2019 - 2024. All rights reserved.