spring-mvc - 如何从 aws secret manager 在 spring mvc 项目中添加数据源属性
问题描述
我一直在寻找从 aws secret manager 获取数据库配置属性的方法,但结果仅针对 spring boot 显示。我是spring mvc的新手,请建议我需要实施哪些步骤。
解决方案
下面的示例展示了如何从 aws secret manager 获取 secrets 值。参考
添加以下依赖项:
<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 项目中使用以下组件。
配置属性
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> \n\n" + "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);
}
}
}
示例中使用的 Hibernate 配置基于 hibernate 基于 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;
}
}
推荐阅读
- javascript - 将子元素添加到元素时的事件触发器
- list - 如何声明可空列表
- c++ - Lamport's Bakery Algorithm中如何绑定并制作唯一的票值?互斥体,C++
- html - :hover 宽度过渡毛刺
- json - 如何使用 vue.js 和 webpack 使 json 文件可供下载?
- python - 将 django 视图字典和变量传递给模板中的 iframe 模板
- asp.net-core - 通过 ngrok 和 vpn 在本地机器上调试机器人
- reactjs - 在按钮单击时获取代码编辑器的值
- windows - 通过在 cmd 中使用 for 循环删除文件夹名称的特定字符串前缀来重命名文件夹
- reactjs - React 根据 Child 中的状态对父组件的子组件进行排序