Я хочу получить пароль своей базы данных из AWS Secret Manager на основе имени ключа, заданного в моих файлах свойств.Однако не похоже, что я могу читать свойства из файла application.yml
, как я надеялся.В приведенном ниже коде my.project.aws-secret
и my.project.region
оба извлекаются как null
.
Неправильно ли я ожидать, что эти свойства будут доступны для извлечения в данный момент?И это правильный подход для достижения этого, или есть более простой способ?
Вот код.В настоящее время я пытаюсь сделать это с помощью ApplicationListener
, но я видел ту же проблему, что и EnvironmentPostProcessor
: 1011 *
ApplicationListener
public class DatasourceAwsProperties implements ApplicationListener<ApplicationEnvironmentPreparedEvent> {
@Override
public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
ConfigurableEnvironment environment = event.getEnvironment();
Properties props = new Properties();
String datasourcePassword = environment.getProperty("my.project.aws-secret"); // why is this null?
String awsRegion = environment.getProperty("my.project.region"); // why is this null?
String secret = getSecret(datasourcePassword, awsRegion);
MapPropertySource newProperties = new MapPropertySource("newProperties", ImmutableMap.of("spring.datasource.password", secret));
environment.getPropertySources().addLast(newProperties);
}
public static String getSecret(String secretName, String region) {
// gets secret from aws
}
application.yml
lots:
of:
properties: ...
my:
project:
aws-secret: the-name-of-the-secret-in-aws
region: us-east-1