aws-rds-spring-boot-integration

AWS RDS Spring Boot Integration

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "aws-rds-spring-boot-integration" with this command: npx skills add giuseppe-trisciuoglio/developer-kit/giuseppe-trisciuoglio-developer-kit-aws-rds-spring-boot-integration

AWS RDS Spring Boot Integration

Overview

Configure AWS RDS databases (Aurora, MySQL, PostgreSQL) with Spring Boot applications. Provides patterns for datasource configuration, HikariCP connection pooling, SSL connections, environment-specific configurations, and AWS Secrets Manager integration.

When to Use

Use when configuring HikariCP connection pools for RDS workloads, implementing read/write split with Aurora replicas, setting up IAM database authentication, enabling SSL/TLS connections, managing database migrations with Flyway, or troubleshooting RDS connectivity issues.

Instructions

Follow these steps to configure AWS RDS with Spring Boot:

Add Dependencies — Include Spring Data JPA, database driver (MySQL/PostgreSQL), and Flyway

Configure Datasource — Set connection properties in application.yml

Configure HikariCP — Optimize pool settings for your RDS workload

Set Up SSL — Enable encrypted connections to RDS

Configure Profiles — Set environment-specific configurations (dev/prod)

Add Migrations — Create Flyway scripts for schema management

Validate Connectivity — Run health check to verify database connection

If validation fails: Check security group rules, verify credentials, ensure RDS is accessible from your network, and confirm SSL certificate configuration.

Run Migrations — Apply Flyway migrations only after connectivity validation passes

Quick Start

Step 1: Add Dependencies

Maven (pom.xml):

<dependencies> <!-- Spring Data JPA --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>

&#x3C;!-- Aurora MySQL Driver -->
&#x3C;dependency>
    &#x3C;groupId>com.mysql&#x3C;/groupId>
    &#x3C;artifactId>mysql-connector-j&#x3C;/artifactId>
    &#x3C;version>8.2.0&#x3C;/version>
    &#x3C;scope>runtime&#x3C;/scope>
&#x3C;/dependency>

&#x3C;!-- Aurora PostgreSQL Driver (alternative) -->
&#x3C;dependency>
    &#x3C;groupId>org.postgresql&#x3C;/groupId>
    &#x3C;artifactId>postgresql&#x3C;/artifactId>
    &#x3C;scope>runtime&#x3C;/scope>
&#x3C;/dependency>

&#x3C;!-- Flyway for database migrations -->
&#x3C;dependency>
    &#x3C;groupId>org.flywaydb&#x3C;/groupId>
    &#x3C;artifactId>flyway-core&#x3C;/artifactId>
&#x3C;/dependency>

&#x3C;!-- Validation -->
&#x3C;dependency>
    &#x3C;groupId>org.springframework.boot&#x3C;/groupId>
    &#x3C;artifactId>spring-boot-starter-validation&#x3C;/artifactId>
&#x3C;/dependency>

</dependencies>

Gradle (build.gradle):

dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-validation'

// Aurora MySQL
runtimeOnly 'com.mysql:mysql-connector-j:8.2.0'

// Aurora PostgreSQL (alternative)
runtimeOnly 'org.postgresql:postgresql'

// Flyway
implementation 'org.flywaydb:flyway-core'

}

Step 2: Basic Datasource Configuration

Use the configuration in the Examples section below. For PostgreSQL, change:

  • Driver: org.postgresql.Driver

  • URL: jdbc:postgresql://... with ?ssl=true&sslmode=require

  • Dialect: org.hibernate.dialect.PostgreSQLDialect

Step 3: Set Up Environment Variables

Production environment variables

export DB_PASSWORD=YourStrongPassword123! export SPRING_PROFILES_ACTIVE=prod

For development

export SPRING_PROFILES_ACTIVE=dev

Database Migration Setup

Create migration files for Flyway:

src/main/resources/db/migration/ ├── V1__create_users_table.sql ├── V2__add_phone_column.sql └── V3__create_orders_table.sql

V1__create_users_table.sql:

CREATE TABLE users ( id BIGINT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_email (email) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Examples

Example 1: Aurora MySQL Configuration

spring: datasource: url: jdbc:mysql://myapp-aurora-cluster.cluster-abc123xyz.us-east-1.rds.amazonaws.com:3306/devops username: admin password: ${DB_PASSWORD} driver-class-name: com.mysql.cj.jdbc.Driver hikari: maximum-pool-size: 20 minimum-idle: 5 connection-timeout: 20000 jpa: hibernate: ddl-auto: validate open-in-view: false

Example 2: Aurora PostgreSQL with SSL

spring.datasource.url=jdbc:postgresql://myapp-aurora-pg-cluster.cluster-abc123xyz.us-east-1.rds.amazonaws.com:5432/devops?ssl=true&sslmode=require spring.datasource.username=${DB_USERNAME} spring.datasource.password=${DB_PASSWORD} spring.datasource.hikari.maximum-pool-size=30 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

Example 3: Read/Write Split Configuration

@Configuration public class DataSourceConfiguration {

@Bean
@Primary
public DataSource dataSource(
        @Qualifier("writerDataSource") DataSource writerDataSource,
        @Qualifier("readerDataSource") DataSource readerDataSource) {
    Map&#x3C;Object, Object> targetDataSources = new HashMap&#x3C;>();
    targetDataSources.put("writer", writerDataSource);
    targetDataSources.put("reader", readerDataSource);

    RoutingDataSource routingDataSource = new RoutingDataSource();
    routingDataSource.setTargetDataSources(targetDataSources);
    routingDataSource.setDefaultTargetDataSource(writerDataSource);

    return routingDataSource;
}

}

Constraints and Warnings

  • HikariCP pool size must respect RDS instance connection limits

  • Security groups must allow traffic from your application's IP range

  • Use AWS Secrets Manager instead of hardcoding credentials

  • Enable storage autoscaling to prevent storage exhaustion

Best Practices

  • HikariCP: Enable leak detection and configure timeouts for failover scenarios

  • Security: Enable SSL/TLS; use IAM Database Authentication when possible

  • Performance: Disable open-in-view; use appropriate indexing and batch operations

  • Monitoring: Enable Spring Boot Actuator with database health checks

Testing

Verify connectivity with this health check endpoint:

@RestController @RequestMapping("/api/health") public class DatabaseHealthController { @Autowired private DataSource dataSource;

@GetMapping("/db-connection")
public ResponseEntity&#x3C;Map&#x3C;String, Object>> testDatabaseConnection() {
    Map&#x3C;String, Object> response = new HashMap&#x3C;>();
    try (Connection connection = dataSource.getConnection()) {
        response.put("status", "success");
        response.put("database", connection.getCatalog());
        response.put("connected", true);
        return ResponseEntity.ok(response);
    } catch (Exception e) {
        response.put("status", "failed");
        response.put("error", e.getMessage());
        response.put("connected", false);
        return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE).body(response);
    }
}

}

curl http://localhost:8080/api/health/db-connection

Support

For detailed troubleshooting and advanced configuration, refer to:

  • AWS RDS Aurora Advanced Configuration

  • AWS RDS Aurora Troubleshooting Guide

  • AWS RDS Aurora documentation

  • Spring Boot Data RDS Aurora documentation

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

shadcn-ui

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

tailwind-css-patterns

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

unit-test-bean-validation

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

react-patterns

No summary provided by upstream source.

Repository SourceNeeds Review