创建 AWS RDS 实例
配置安全组
根据您选择的数据库类型,在 pom.xml
或 build.gradle
中添加相应依赖:
MySQL 示例(Maven):
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
PostgreSQL 示例(Maven):
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
application.properties 示例(MySQL):
spring.datasource.url=jdbc:mysql://your-rds-endpoint:3306/your-database-name
spring.datasource.username=your-username
spring.datasource.password=your-password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# HikariCP 连接池配置(可选)
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.max-lifetime=2000000
spring.datasource.hikari.connection-timeout=30000
application.yml 示例(PostgreSQL):
spring:
datasource:
url: jdbc:postgresql://your-rds-endpoint:5432/your-database-name
username: your-username
password: your-password
driver-class-name: org.postgresql.Driver
hikari:
maximum-pool-size: 10
minimum-idle: 5
idle-timeout: 30000
max-lifetime: 2000000
connection-timeout: 30000
如果您想使用 JPA,添加以下依赖并配置:
Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
JPA 配置(application.properties):
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>secretsmanager</artifactId>
</dependency>
@Configuration
public class AwsSecretsManagerConfig {
@Value("${aws.secretsmanager.secret-name}")
private String secretName;
@Bean
public DataSource dataSource() {
SecretsManagerClient client = SecretsManagerClient.create();
GetSecretValueRequest request = GetSecretValueRequest.builder()
.secretId(secretName)
.build();
GetSecretValueResponse response = client.getSecretValue(request);
// 解析JSON格式的secret
String secret = response.secretString();
JsonNode jsonNode = new ObjectMapper().readTree(secret);
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl(jsonNode.get("url").asText());
dataSource.setUsername(jsonNode.get("username").asText());
dataSource.setPassword(jsonNode.get("password").asText());
return dataSource;
}
}
public class IamAuthTokenGenerator {
public static String generateAuthToken(String region, String hostname,
int port, String username) {
RdsIamAuthTokenGenerator generator = RdsIamAuthTokenGenerator.builder()
.credentials(DefaultCredentialsProvider.create())
.region(Region.of(region))
.build();
return generator.getAuthToken(
GetIamAuthTokenRequest.builder()
.hostname(hostname)
.port(port)
.userName(username)
.build());
}
}
然后在数据源配置中使用生成的令牌作为密码。
连接超时
认证失败
性能问题
通过以上步骤,您应该能够成功将 Spring Boot 应用连接到 AWS RDS 数据库。