Как добавить свойства источника данных в проект spring mvc из aws secret manager

#spring-mvc #aws-secrets-manager

Вопрос:

Я искал способ получения свойств конфигурации базы данных из aws secret manager, но результаты были показаны только для spring boot. Я новичок в spring mvc, пожалуйста, подскажите, какие шаги мне нужно реализовать.

Ответ №1:

В приведенном ниже примере показано, как получить значение secrets из aws secret manager.Ссылка


Добавьте следующие зависимости:

 <dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>secretsmanager</artifactId>
     <version>2.14.7</version>
 </dependency>

  <dependencyManagement>
            <dependencies>
                 <dependency>
                    <groupId>software.amazon.awssdk</groupId>
                    <artifactId>bom</artifactId>
                     <version>2.17.46</version>
                    <type>pom</type>
                </dependency>
    
            </dependencies>
    </dependencyManagement>
 

При настройке источника данных в вашем проекте spring mvc можно использовать следующие компоненты.

config.properties

 newSecretName= <Set the secret name>
secretValue= <Set the secret value>
modSecretValue= <Set an updated secret value>
 

ДЕМОНСТРАЦИЯ

GetSecretValue.java

 package com.example.secrets;

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient;
import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest;
import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueResponse;
import software.amazon.awssdk.services.secretsmanager.model.SecretsManagerException;

public class GetSecretValue {

    public static void main(String[] args) {

        final String USAGE = "n"   "Usage:n"   "    <secretName> nn"   "Where:n"
                  "    secretName - the name of the secret (for example, tutorials/MyFirstSecret). n";

        if (args.length != 1) {
            System.out.println(USAGE);
            System.exit(1);
        }

        String secretName = args[0];
        Region region = Region.US_EAST_1;
        SecretsManagerClient secretsClient = SecretsManagerClient.builder().region(region).build();

        getValue(secretsClient, secretName);
        secretsClient.close();
    }

    public static void getValue(SecretsManagerClient secretsClient, String secretName) {

        try {
            GetSecretValueRequest valueRequest = GetSecretValueRequest.builder().secretId(secretName).build();

            GetSecretValueResponse valueResponse = secretsClient.getSecretValue(valueRequest);
            String secret = valueResponse.secretString();
            System.out.println(secret);

        } catch (SecretsManagerException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
 

Конфигурация гибернации, используемая в примере, основана на конфигурации гибернации на основе Java.

 @Configuration
@EnableTransactionManagement
public class AppContext {

   
    @Bean
    public LocalSessionFactoryBean sessionFactory() {
        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        sessionFactory.setPackagesToScan(new String[] {
            "net.knf.demo.entity"
        });
        sessionFactory.setHibernateProperties(hibernateProperties());
        return sessionFactory;
    }

   //**Here you can set the secrets from aws secret manager while configuring datasource.**
    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(<DriveClassName>));
        dataSource.setUrl(<URL>);
        dataSource.setUsername(<UserName>);
        dataSource.setPassword(<password>);
        return dataSource;
    }

    private Properties hibernateProperties() {
       .........
        return properties;
    }

    @Bean
    public HibernateTransactionManager getTransactionManager() {
        HibernateTransactionManager transactionManager = new HibernateTransactionManager();
        transactionManager.setSessionFactory(sessionFactory().getObject());
        return transactionManager;
    }
}
 

Комментарии:

1. Это сработало. Спасибо @sibin