{"id":139085,"date":"2025-11-27T11:24:42","date_gmt":"2025-11-27T09:24:42","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=139085"},"modified":"2025-11-27T11:24:45","modified_gmt":"2025-11-27T09:24:45","slug":"spring-data-jpa-switch-to-aws-rds-proxy-example","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/spring-data-jpa-switch-to-aws-rds-proxy-example.html","title":{"rendered":"Spring Data JPA Switch to AWS RDS Proxy Example"},"content":{"rendered":"<h2 class=\"wp-block-heading\">1. Introduction<\/h2>\n<p><a href=\"https:\/\/docs.aws.amazon.com\/AmazonRDS\/latest\/UserGuide\/rds-proxy.html\" target=\"_blank\" rel=\"noreferrer noopener\">AWS RDS Proxy<\/a> is a fully managed, highly available database proxy for Amazon Relational Database Service(RDS). It sits between the application and the relational database to manage connections to the database and provides better scaling, resilience, and security. In this example, I will show the changes needed in a Spring Data JPA project when connecting to AWS RDS Proxy instead of the Postgres Database directly.<\/p>\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">2. Setup<\/h2>\n<p>In this step, I will create a Spring Data JPA project via <a href=\"https:\/\/start.spring.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">Spring Initializer<\/a>.<\/p>\n<h3 class=\"wp-block-heading\">2.1 Build.gradle<\/h3>\n<p>In this step, I will add the AWS RDS libraries.<\/p>\n<p><span style=\"text-decoration: underline\"><em>build.gradle<\/em><\/span><\/p>\n<pre class=\"brush:plain;highlight:[25,27]\">plugins {\n\tid 'java'\n\tid 'org.springframework.boot' version '3.5.7'\n\tid 'io.spring.dependency-management' version '1.1.7'\n}\n\ngroup = 'org.jcg.zheng.demo'\nversion = '0.0.1-SNAPSHOT'\ndescription = 'Demo project for Spring Boot'\n\njava {\n\ttoolchain {\n\t\tlanguageVersion = JavaLanguageVersion.of(21)\n\t}\n}\n\nrepositories {\n\tmavenCentral()\n}\n\ndependencies {\n\timplementation 'org.springframework.boot:spring-boot-starter-data-jpa'\n\t\n\t\/\/ https:\/\/mvnrepository.com\/artifact\/software.amazon.awssdk\/rds\n\timplementation(\"software.amazon.awssdk:rds:2.38.2\")\n\t\/\/ https:\/\/mvnrepository.com\/artifact\/software.amazon.awssdk\/auth\n\timplementation(\"software.amazon.awssdk:auth:2.38.2\")\n\n\truntimeOnly 'org.postgresql:postgresql'\n\ttestImplementation 'org.springframework.boot:spring-boot-starter-test'\n\ttestRuntimeOnly 'org.junit.platform:junit-platform-launcher'\n}\n\ntasks.named('test') {\n\tuseJUnitPlatform()\n}\n<\/pre>\n<ul class=\"wp-block-list\">\n<li>Line 25 and 27: libraries are needed for the AWS RDS Proxy.<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">2.2 AwsRdsProxyApplication<\/h3>\n<p>No change to the generated <code>AwsRdsProxyApplication.java<\/code>.<\/p>\n<p><span style=\"text-decoration: underline\"><em>AwsRdsProxyApplication.java<\/em><\/span><\/p>\n<pre class=\"brush:java\">package org.jcg.zheng.demo.aws_rds_proxy;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n\n@SpringBootApplication\npublic class AwsRdsProxyApplication {\n\n\tpublic static void main(String[] args) {\n\t\tSpringApplication.run(AwsRdsProxyApplication.class, args);\n\t}\n\n}\n<\/pre>\n<h3 class=\"wp-block-heading\">2.3 Demo Entity<\/h3>\n<p>In this step, I will create a <code>DemoEntity.java<\/code>.<\/p>\n<p><span style=\"text-decoration: underline\"><em>DemoEntity.java<\/em><\/span><\/p>\n<pre class=\"brush:java\">package org.jcg.zheng.demo.aws_rds_proxy.entity;\n\nimport jakarta.persistence.Entity;\nimport jakarta.persistence.GeneratedValue;\nimport jakarta.persistence.Id;\nimport jakarta.persistence.Table;\n\n@Entity\n@Table(name = \"TABLE_1\")\npublic class DemoEntity {\n\n\t@Id\n\t@GeneratedValue\n\tprivate Integer id;\n\n\tprivate String name;\n\n\tpublic Integer getId() {\n\t\treturn id;\n\t}\n\n\tpublic String getName() {\n\t\treturn name;\n\t}\n\n\tpublic void setId(Integer id) {\n\t\tthis.id = id;\n\t}\n\n\tpublic void setName(String name) {\n\t\tthis.name = name;\n\t}\n\n}\n<\/pre>\n<h2 class=\"wp-block-heading\">3. DataSource Configuration<\/h2>\n<p>In this step, I will create two data source configurations: one for <code>localdev<\/code> that connects to the database directly, the other for <code>prod<\/code> that connects to RDS Proxy.<\/p>\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">3.1 LocalDataSourceConfig<\/h3>\n<p>In this step, I will create a <code>LocalDataSourceConfig.java<\/code> that connects to the Postgres database directly for the <code>localdev<\/code> profile.<\/p>\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n<p><span style=\"text-decoration: underline\"><em>LocalDataSourceConfig.java<\/em><\/span><\/p>\n<pre class=\"brush:java;highlight:[28]\">package org.jcg.zheng.demo.aws_rds_proxy.config;\n\nimport javax.sql.DataSource;\n\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.boot.context.properties.ConfigurationProperties;\nimport org.springframework.boot.jdbc.DataSourceBuilder;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.context.annotation.Profile;\n\n@Configuration\n@Profile(\"localdev\")\npublic class LocalDataSourceConfig {\n\n\t@Value(\"${spring.datasource.url}\")\n\tprivate String url;\n\n\t@Value(\"${spring.datasource.username}\")\n\tprivate String dbUsername;\n\n\t@Value(\"${spring.datasource.password}\")\n\tprivate String dbPassword;\n\n\t@Bean\n\t@ConfigurationProperties(prefix = \"spring.datasource.hikari\")\n\tpublic DataSource dataSource() {\n\t\treturn DataSourceBuilder.create().url(url).username(dbUsername).password(dbPassword).build();\n\t}\n\n}\n<\/pre>\n<ul class=\"wp-block-list\">\n<li>Line 28: The <code>url<\/code>, <code>dbUsername<\/code>, and <code>password<\/code> are defined in the <code>application-localdev.yaml<\/code>.<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">3.2 AWS RDS Proxy DataSourceConfig<\/h3>\n<p>In this example, I will create the <code>ProxyDataSourceConfig<\/code> that connects to RDS Proxy via IAM auth token.<\/p>\n<p><span style=\"text-decoration: underline\"><em>ProxyDataSourceConfig.java<\/em><\/span><\/p>\n<pre class=\"brush:java;highlight:[44,45,52,62,65,66,75,76]\">package org.jcg.zheng.demo.aws_rds_proxy.config;\n\nimport java.sql.SQLException;\nimport java.util.concurrent.atomic.AtomicReference;\n\nimport javax.sql.DataSource;\n\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.boot.context.properties.ConfigurationProperties;\nimport org.springframework.boot.jdbc.DataSourceBuilder;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.context.annotation.Profile;\nimport org.springframework.scheduling.annotation.EnableScheduling;\nimport org.springframework.scheduling.annotation.Scheduled;\n\nimport com.zaxxer.hikari.HikariDataSource;\n\nimport software.amazon.awssdk.regions.Region;\nimport software.amazon.awssdk.services.rds.RdsUtilities;\n\n@Configuration\n@EnableScheduling\n@Profile(\"prod\")\npublic class ProxyDataSourceConfig {\n\n\t@Value(\"${spring.datasource.url}\")\n\tprivate String url;\n\n\t@Value(\"${spring.datasource.username}\")\n\tprivate String dbUsername;\n\n\t@Value(\"${spring.datasource.password}\")\n\tprivate String dbPassword;\n\n\t@Value(\"${aws.rds.proxy.host}\")\n\tprivate String host;\n\t@Value(\"${aws.rds.proxy.port}\")\n\tprivate int port;\n\n\t@Value(\"${aws.region}\")\n\tprivate String region;\n\n\tprivate AtomicReference&lt;String&gt; currentToken = new AtomicReference&lt;&gt;();\n\tprivate DataSource dataSource;\n\n\t@Bean\n\t@ConfigurationProperties(prefix = \"spring.datasource.hikari\")\n\tpublic DataSource dataSource() {\n\t\tgetIamAuthToken();\n\n\t\tdataSource = DataSourceBuilder.create().url(url).username(dbUsername).password(currentToken.get()).build();\n\n\t\treturn dataSource;\n\t}\n\n\tprivate void getIamAuthToken() {\n\t\tRdsUtilities rdsUtilities = RdsUtilities.builder().region(Region.of(region)).build();\n\n\t\tString authToken = rdsUtilities\n\t\t\t\t.generateAuthenticationToken(b -&gt; b.hostname(host).port(port).username(dbUsername));\n\t\tcurrentToken.set(authToken);\n\t}\n\n\tprivate void refreshHikariPool(HikariDataSource hikariDatasource) {\n\t\thikariDatasource.getHikariConfigMXBean().setPassword(currentToken.get());\n\n\t\ttry {\n\t\t\thikariDatasource.evictConnection(hikariDatasource.getConnection());\n\t\t} catch (SQLException e) {\n\t\t\te.printStackTrace();\n\t\t}\n\t}\n\n\t@Scheduled(fixedRate = 10 * 60 * 1000) \/\/ every 10 minutes\n\tpublic void refreshIamToken() {\n\t\tgetIamAuthToken();\n\n\t\tif (dataSource != null &amp;&amp; dataSource instanceof HikariDataSource hikariDataSoure) {\n\t\t\trefreshHikariPool(hikariDataSoure);\n\t\t}\n\t}\n}\n<\/pre>\n<ul class=\"wp-block-list\">\n<li>Line 44: RDS Proxy is set up to connect with IAM auth token. It expires every 15 minutes and <code>AtomicReference&lt;String&gt; currentToken<\/code> holds its current value.<\/li>\n<li>Line 45: define <code>datasource<\/code> as a class member because IAM auth token refreshes periodically.<\/li>\n<li>Kine 52: the <code>Datasource<\/code>&#8216;s <code>password<\/code> is set by the <code>currentToken<\/code> value.<\/li>\n<li>Line 62: generate the IAM auth token via <code>RdsUtilities<\/code> and set the value in the <code>currentToken<\/code>.<\/li>\n<li>Line 65, 66: the <code>refreshHikariPool<\/code> method sets the password by the <code>currentToken<\/code> for a new connection and <code>evictConnection<\/code> for the existing connection.<\/li>\n<li>Line 75, 76: schedule a job to <code>refreshIamToken<\/code> every 10 minutes,<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">4. Application Configuration<\/h2>\n<p>In this step, I will create three application YAML files:<\/p>\n<ul class=\"wp-block-list\">\n<li><code>application.yaml<\/code> for common configurations.<\/li>\n<li><code>applicaiton-localdev.yaml<\/code> for connecting to the database directly.<\/li>\n<li><code>application-prod.yaml<\/code> for connecting to the RDS proxy.<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">4.1 Application Common Configuration<\/h3>\n<p>The <code>application.yaml<\/code> defines the common properties.<\/p>\n<p><span style=\"text-decoration: underline\"><em>application.yaml<\/em><\/span><\/p>\n<pre class=\"brush:plain\"># application.yaml\nlogging:\n  level:\n    root: INFO\n    com.zaxxer.hikari: DEBUG\n    org.hibernate.SQL: DEBUG\n\nspring:\n  application:\n    name: aws-rds-proxy\n  jpa:\n    open-in-view: false\n    show-sql: true\n    hibernate:\n      ddl-auto: update\n    properties:\n      hibernate:\n        default_schema: marydb\n        format_sql: true\n  profiles:\n    active: localdev\n<\/pre>\n<h3 class=\"wp-block-heading\">4.2 Application Localdev Configuration<\/h3>\n<p>The <code>application-localdev.yaml<\/code> file defines the datasource connection properties for <code>localdev<\/code>.<\/p>\n<p><span style=\"text-decoration: underline\"><em>application-localdev.yaml<\/em><\/span><\/p>\n<pre class=\"brush:plain;highlight:[9,13]\"># application-localdev.yaml\n\nspring:\n  config:\n    activate:\n      on-profile: localdev\n\n  datasource:\n    url: jdbc:postgresql:\/\/localhost:5432\/postgres\n    username: postgres\n    password: zheng22\n    hikari:\n      pool-name: localHikariPool\n<\/pre>\n<ul class=\"wp-block-list\">\n<li>Line 9: the <code>url<\/code> is the actual database connection url.<\/li>\n<li>Line 13: leave <code>hikari<\/code> pool configuration with the default value except the <code>pool-name<\/code>.<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">4.3 AWS RDS Proxy Configuration<\/h3>\n<p>The <code>application-prod.yaml<\/code> defines the RDS Proxy properties.<\/p>\n<p><span style=\"text-decoration: underline\"><em>application-prod.yaml<\/em><\/span><\/p>\n<pre class=\"brush:plain;highlight:[10,13,14,21,22]\"># application-prod.yaml\n\nspring:\n  config:\n    activate:\n      on-profile: prod\n\nspring:\n  datasource:\n    url: jdbc:postgresql:\/\/mydb-proxy.proxy-abcdefgh1234.us-east-1.rds.amazonaws.com:5432\/postgres\n    username: proxyUser\n    hikari:      \n      minimum-idle: 0                  # minimum idle connections, no need for proxy as IAM auth token refreshes   \n      max-lifetime: 110000             # 1 minute 50 seconds (when Proxy Idle Connection time is 2min)\n      pool-name: RdsProxyHikariPool\n\naws:\n  region: us-east-1\n  rds:\n    proxy:\n      host: mydb-proxy.proxy-abcdefgh1234.us-east-1.rds.amazonaws.com\n      port: 5432\n\n<\/pre>\n<ul class=\"wp-block-list\">\n<li>Line 10: the <code>url<\/code> is the proxy endpoint.<\/li>\n<li>Line 13: the hikari <code>minimum-idle<\/code> defaults to <code>10<\/code>. Set to <code>0<\/code> as IAM auth token expires.<\/li>\n<li>Line 14: the hikari <code>max-lifetime<\/code> defaults to <code>30<\/code> minutes. It needs to be less than Proxy&#8217;s <code>Idle Client Connection Timeout<\/code>.<\/li>\n<li>Line 21, 22: the AWS Proxy <code>host<\/code> and <code>port<\/code> are used to generate IAM auth token.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">5. Start LocalDev<\/h2>\n<p>In this step, I will start the Spring Data JPA project for localdev and capture the server log.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p><span style=\"text-decoration: underline\"><em>Server Log<\/em><\/span><\/p>\n<pre class=\"brush:plain;highlight:[109,110,111,112]\">\n  .   ____          _            __ _ _\n \/\\\\ \/ ___'_ __ _ _(_)_ __  __ _ \\ \\ \\ \\\n( ( )\\___ | '_ | '_| | '_ \\\/ _` | \\ \\ \\ \\\n \\\\\/  ___)| |_)| | | | | || (_| |  ) ) ) )\n  '  |____| .__|_| |_|_| |_\\__, | \/ \/ \/ \/\n =========|_|==============|___\/=\/_\/_\/_\/\n\n :: Spring Boot ::                (v3.5.7)\n\n2025-11-16T10:41:12.937-06:00  INFO 28284 --- [aws-rds-proxy] [           main] o.j.z.d.a.AwsRdsProxyApplication         : Starting AwsRdsProxyApplication using Java 21.0.8 with PID 28284 (C:\\MaryZheng\\workspace\\aws-rds-proxy\\bin\\main started by zzhen in C:\\MaryZheng\\workspace\\aws-rds-proxy)\n2025-11-16T10:41:12.941-06:00  INFO 28284 --- [aws-rds-proxy] [           main] o.j.z.d.a.AwsRdsProxyApplication         : The following 1 profile is active: \"localdev\"\n2025-11-16T10:41:13.334-06:00  INFO 28284 --- [aws-rds-proxy] [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.\n2025-11-16T10:41:13.361-06:00  INFO 28284 --- [aws-rds-proxy] [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 16 ms. Found 0 JPA repository interfaces.\n2025-11-16T10:41:13.593-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : Class org.postgresql.Driver found in Thread context class loader jdk.internal.loader.ClassLoaders$AppClassLoader@5c647e05\n2025-11-16T10:41:13.680-06:00  INFO 28284 --- [aws-rds-proxy] [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]\n2025-11-16T10:41:13.719-06:00  INFO 28284 --- [aws-rds-proxy] [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 6.6.33.Final\n2025-11-16T10:41:13.749-06:00  INFO 28284 --- [aws-rds-proxy] [           main] o.h.c.internal.RegionFactoryInitiator    : HHH000026: Second-level cache disabled\n2025-11-16T10:41:13.973-06:00  INFO 28284 --- [aws-rds-proxy] [           main] o.s.o.j.p.SpringPersistenceUnitInfo      : No LoadTimeWeaver setup: ignoring JPA class transformer\n2025-11-16T10:41:13.991-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : localHikariPool - configuration:\n2025-11-16T10:41:13.997-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : allowPoolSuspension.............false\n2025-11-16T10:41:13.997-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : autoCommit......................true\n2025-11-16T10:41:13.997-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : catalog.........................none\n2025-11-16T10:41:13.997-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : connectionInitSql...............none\n2025-11-16T10:41:13.997-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : connectionTestQuery.............none\n2025-11-16T10:41:14.000-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : connectionTimeout...............30000\n2025-11-16T10:41:14.000-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : credentials.....................com.zaxxer.hikari.util.Credentials@41f4039e\n2025-11-16T10:41:14.002-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : dataSource......................none\n2025-11-16T10:41:14.002-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : dataSourceClassName.............none\n2025-11-16T10:41:14.002-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : dataSourceJNDI..................none\n2025-11-16T10:41:14.002-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : dataSourceProperties............{password=}\n2025-11-16T10:41:14.003-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : driverClassName.................\"org.postgresql.Driver\"\n2025-11-16T10:41:14.003-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : exceptionOverride...............none\n2025-11-16T10:41:14.003-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : exceptionOverrideClassName......none\n2025-11-16T10:41:14.003-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : healthCheckProperties...........{}\n2025-11-16T10:41:14.003-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : healthCheckRegistry.............none\n2025-11-16T10:41:14.004-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : idleTimeout.....................600000\n2025-11-16T10:41:14.004-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : initializationFailTimeout.......1\n2025-11-16T10:41:14.004-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : isolateInternalQueries..........false\n2025-11-16T10:41:14.004-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : jdbcUrl.........................jdbc:postgresql:\/\/localhost:5432\/postgres\n2025-11-16T10:41:14.005-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : keepaliveTime...................120000\n2025-11-16T10:41:14.005-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : leakDetectionThreshold..........0\n2025-11-16T10:41:14.005-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : maxLifetime.....................1800000\n2025-11-16T10:41:14.005-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : maximumPoolSize.................10\n2025-11-16T10:41:14.005-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : metricRegistry..................none\n2025-11-16T10:41:14.005-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : metricsTrackerFactory...........none\n2025-11-16T10:41:14.006-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : minimumIdle.....................10\n2025-11-16T10:41:14.006-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : password........................\n2025-11-16T10:41:14.006-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : poolName........................\"localHikariPool\"\n2025-11-16T10:41:14.006-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : readOnly........................false\n2025-11-16T10:41:14.006-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : registerMbeans..................false\n2025-11-16T10:41:14.006-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : scheduledExecutor...............none\n2025-11-16T10:41:14.007-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : schema..........................none\n2025-11-16T10:41:14.007-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : threadFactory...................internal\n2025-11-16T10:41:14.007-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : transactionIsolation............default\n2025-11-16T10:41:14.007-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : username........................\"postgres\"\n2025-11-16T10:41:14.007-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariConfig           : validationTimeout...............5000\n2025-11-16T10:41:14.007-06:00  INFO 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariDataSource       : localHikariPool - Starting...\n2025-11-16T10:41:14.019-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Attempting to create\/setup new connection (57dbbd2e-1c25-4030-96a1-e1a874eb40f6)\n2025-11-16T10:41:14.209-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Established new connection (57dbbd2e-1c25-4030-96a1-e1a874eb40f6)\n2025-11-16T10:41:14.212-06:00  INFO 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.pool.HikariPool        : localHikariPool - Added connection org.postgresql.jdbc.PgConnection@1ef31f71\n2025-11-16T10:41:14.214-06:00  INFO 28284 --- [aws-rds-proxy] [           main] com.zaxxer.hikari.HikariDataSource       : localHikariPool - Start completed.\n2025-11-16T10:41:14.276-06:00  INFO 28284 --- [aws-rds-proxy] [           main] org.hibernate.orm.connections.pooling    : HHH10001005: Database info:\n\tDatabase JDBC URL [Connecting through datasource 'HikariDataSource (localHikariPool)']\n\tDatabase driver: undefined\/unknown\n\tDatabase version: 18.0\n\tAutocommit mode: undefined\/unknown\n\tIsolation level: undefined\/unknown\n\tMinimum pool size: undefined\/unknown\n\tMaximum pool size: undefined\/unknown\n2025-11-16T10:41:14.326-06:00 DEBUG 28284 --- [aws-rds-proxy] [ool:housekeeper] com.zaxxer.hikari.pool.HikariPool        : localHikariPool - Pool stats (total=1\/10, idle=1\/10, active=0, waiting=0)\n2025-11-16T10:41:14.326-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Attempting to create\/setup new connection (df898777-2ad7-4c4e-8c71-bda140a0d554)\n2025-11-16T10:41:14.369-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Established new connection (df898777-2ad7-4c4e-8c71-bda140a0d554)\n2025-11-16T10:41:14.369-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.HikariPool        : localHikariPool - Added connection org.postgresql.jdbc.PgConnection@506a1e6b\n2025-11-16T10:41:14.405-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.HikariPool        : localHikariPool - After adding stats (total=2\/10, idle=2\/10, active=0, waiting=0)\n2025-11-16T10:41:14.405-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Attempting to create\/setup new connection (4207c174-f34f-4e33-ab04-6f6583ede7dd)\n2025-11-16T10:41:14.450-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Established new connection (4207c174-f34f-4e33-ab04-6f6583ede7dd)\n2025-11-16T10:41:14.450-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.HikariPool        : localHikariPool - Added connection org.postgresql.jdbc.PgConnection@5a92751b\n2025-11-16T10:41:14.484-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.HikariPool        : localHikariPool - After adding stats (total=3\/10, idle=3\/10, active=0, waiting=0)\n2025-11-16T10:41:14.484-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Attempting to create\/setup new connection (98a6acd5-2817-4746-b82c-45a06a3e1648)\n2025-11-16T10:41:14.534-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Established new connection (98a6acd5-2817-4746-b82c-45a06a3e1648)\n2025-11-16T10:41:14.535-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.HikariPool        : localHikariPool - Added connection org.postgresql.jdbc.PgConnection@1f90e02d\n2025-11-16T10:41:14.579-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.HikariPool        : localHikariPool - After adding stats (total=4\/10, idle=4\/10, active=0, waiting=0)\n2025-11-16T10:41:14.579-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Attempting to create\/setup new connection (e780691b-c149-4578-9f88-3db964cb5eee)\n2025-11-16T10:41:14.631-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Established new connection (e780691b-c149-4578-9f88-3db964cb5eee)\n2025-11-16T10:41:14.631-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.HikariPool        : localHikariPool - Added connection org.postgresql.jdbc.PgConnection@1f092cf2\n2025-11-16T10:41:14.674-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.HikariPool        : localHikariPool - After adding stats (total=5\/10, idle=5\/10, active=0, waiting=0)\n2025-11-16T10:41:14.674-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Attempting to create\/setup new connection (9f96f40f-de1d-41d1-8ce6-3f12cdbbbc24)\n2025-11-16T10:41:14.722-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Established new connection (9f96f40f-de1d-41d1-8ce6-3f12cdbbbc24)\n2025-11-16T10:41:14.722-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.HikariPool        : localHikariPool - Added connection org.postgresql.jdbc.PgConnection@2e45985f\n2025-11-16T10:41:14.753-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.HikariPool        : localHikariPool - After adding stats (total=6\/10, idle=6\/10, active=0, waiting=0)\n2025-11-16T10:41:14.753-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Attempting to create\/setup new connection (d809e1fd-5f3e-4d22-82a3-0bbd0617623c)\n2025-11-16T10:41:14.800-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Established new connection (d809e1fd-5f3e-4d22-82a3-0bbd0617623c)\n2025-11-16T10:41:14.800-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.HikariPool        : localHikariPool - Added connection org.postgresql.jdbc.PgConnection@67360a21\n2025-11-16T10:41:14.845-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.HikariPool        : localHikariPool - After adding stats (total=7\/10, idle=7\/10, active=0, waiting=0)\n2025-11-16T10:41:14.845-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Attempting to create\/setup new connection (9efc7614-6d51-43f2-90a3-215aea79dd21)\n2025-11-16T10:41:14.889-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Established new connection (9efc7614-6d51-43f2-90a3-215aea79dd21)\n2025-11-16T10:41:14.890-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.HikariPool        : localHikariPool - Added connection org.postgresql.jdbc.PgConnection@7fbf1f62\n2025-11-16T10:41:14.923-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.HikariPool        : localHikariPool - After adding stats (total=8\/10, idle=8\/10, active=0, waiting=0)\n2025-11-16T10:41:14.923-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Attempting to create\/setup new connection (1c2b4c84-4b3a-4c13-aac8-09ffe33ae58d)\n2025-11-16T10:41:14.961-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Established new connection (1c2b4c84-4b3a-4c13-aac8-09ffe33ae58d)\n2025-11-16T10:41:14.961-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.HikariPool        : localHikariPool - Added connection org.postgresql.jdbc.PgConnection@2907c2db\n2025-11-16T10:41:14.978-06:00  INFO 28284 --- [aws-rds-proxy] [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)\n2025-11-16T10:41:15.002-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.HikariPool        : localHikariPool - After adding stats (total=9\/10, idle=8\/10, active=1, waiting=0)\n2025-11-16T10:41:15.002-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Attempting to create\/setup new connection (eda9d18f-20cc-4a0e-ab50-1a2666a463e7)\n2025-11-16T10:41:15.036-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Established new connection (eda9d18f-20cc-4a0e-ab50-1a2666a463e7)\n2025-11-16T10:41:15.036-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.HikariPool        : localHikariPool - Added connection org.postgresql.jdbc.PgConnection@2b8230c4\n2025-11-16T10:41:15.081-06:00 DEBUG 28284 --- [aws-rds-proxy] [onnection-adder] com.zaxxer.hikari.pool.HikariPool        : localHikariPool - After adding stats (total=10\/10, idle=9\/10, active=1, waiting=0)\n2025-11-16T10:41:15.089-06:00 DEBUG 28284 --- [aws-rds-proxy] [           main] org.hibernate.SQL                        : \n    create table marydb.table_1 (\n        id integer not null,\n        name varchar(255),\n        primary key (id)\n    )\nHibernate: \n    create table marydb.table_1 (\n        id integer not null,\n        name varchar(255),\n        primary key (id)\n    )\n2025-11-16T10:41:15.112-06:00  INFO 28284 --- [aws-rds-proxy] [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'\n2025-11-16T10:41:15.256-06:00  INFO 28284 --- [aws-rds-proxy] [           main] o.j.z.d.a.AwsRdsProxyApplication         : Started AwsRdsProxyApplication in 2.688 seconds (process running for 2.967)\n2025-11-16T10:41:15.262-06:00  INFO 28284 --- [aws-rds-proxy] [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'\n2025-11-16T10:41:15.265-06:00  INFO 28284 --- [aws-rds-proxy] [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : localHikariPool - Shutdown initiated...\n2025-11-16T10:41:15.265-06:00 DEBUG 28284 --- [aws-rds-proxy] [ionShutdownHook] com.zaxxer.hikari.pool.HikariPool        : localHikariPool - Before shutdown stats (total=10\/10, idle=10\/10, active=0, waiting=0)\n2025-11-16T10:41:15.266-06:00 DEBUG 28284 --- [aws-rds-proxy] [nnection-closer] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Closing connection org.postgresql.jdbc.PgConnection@1ef31f71: (connection evicted)\n2025-11-16T10:41:15.267-06:00 DEBUG 28284 --- [aws-rds-proxy] [nnection-closer] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Closing connection org.postgresql.jdbc.PgConnection@506a1e6b: (connection evicted)\n2025-11-16T10:41:15.267-06:00 DEBUG 28284 --- [aws-rds-proxy] [nnection-closer] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Closing connection org.postgresql.jdbc.PgConnection@5a92751b: (connection evicted)\n2025-11-16T10:41:15.268-06:00 DEBUG 28284 --- [aws-rds-proxy] [nnection-closer] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Closing connection org.postgresql.jdbc.PgConnection@1f90e02d: (connection evicted)\n2025-11-16T10:41:15.268-06:00 DEBUG 28284 --- [aws-rds-proxy] [nnection-closer] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Closing connection org.postgresql.jdbc.PgConnection@1f092cf2: (connection evicted)\n2025-11-16T10:41:15.269-06:00 DEBUG 28284 --- [aws-rds-proxy] [nnection-closer] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Closing connection org.postgresql.jdbc.PgConnection@2e45985f: (connection evicted)\n2025-11-16T10:41:15.269-06:00 DEBUG 28284 --- [aws-rds-proxy] [nnection-closer] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Closing connection org.postgresql.jdbc.PgConnection@67360a21: (connection evicted)\n2025-11-16T10:41:15.269-06:00 DEBUG 28284 --- [aws-rds-proxy] [nnection-closer] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Closing connection org.postgresql.jdbc.PgConnection@7fbf1f62: (connection evicted)\n2025-11-16T10:41:15.270-06:00 DEBUG 28284 --- [aws-rds-proxy] [nnection-closer] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Closing connection org.postgresql.jdbc.PgConnection@2907c2db: (connection evicted)\n2025-11-16T10:41:15.270-06:00 DEBUG 28284 --- [aws-rds-proxy] [nnection-closer] com.zaxxer.hikari.pool.PoolBase          : localHikariPool - Closing connection org.postgresql.jdbc.PgConnection@2b8230c4: (connection evicted)\n2025-11-16T10:41:15.271-06:00 DEBUG 28284 --- [aws-rds-proxy] [ionShutdownHook] com.zaxxer.hikari.pool.HikariPool        : localHikariPool - After  shutdown stats (total=0\/10, idle=0\/10, active=0, waiting=0)\n2025-11-16T10:41:15.271-06:00  INFO 28284 --- [aws-rds-proxy] [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : localHikariPool - Shutdown completed.\n<\/pre>\n<ul class=\"wp-block-list\">\n<li>Line 109-112: created a database table based on the <code>@Entity<\/code>.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">6. AWS RDS Proxy Hikari Configuration<\/h2>\n<p>Most of the HikariCP configuration can use the default value, but the <code>minimum-idle<\/code> need to set to 0 and <code>max-lifetime<\/code> must be shorter than the Proxy&#8217;s <code>Idle Client Connection Timeout<\/code>.<\/p>\n<p><span style=\"text-decoration: underline\"><em>Default Hikari Configuration<\/em><\/span><\/p>\n<pre class=\"brush:plain;highlight:[24,28]\">localHikariPool - configuration:\nallowPoolSuspension.............false\nautoCommit......................true\ncatalog.........................none\nconnectionInitSql...............none\nconnectionTestQuery.............none\nconnectionTimeout...............30000\ncredentials.....................com.zaxxer.hikari.util.Credentials@41f4039e\ndataSource......................none\ndataSourceClassName.............none\ndataSourceJNDI..................none\ndataSourceProperties............{password=}\ndriverClassName.................\"org.postgresql.Driver\"\nexceptionOverride...............none\nexceptionOverrideClassName......none\nhealthCheckProperties...........{}\nhealthCheckRegistry.............none\nidleTimeout.....................600000\ninitializationFailTimeout.......1\nisolateInternalQueries..........false\njdbcUrl.........................jdbc:postgresql:\/\/localhost:5432\/postgres\nkeepaliveTime...................120000\nleakDetectionThreshold..........0\nmaxLifetime.....................1800000\nmaximumPoolSize.................10\nmetricRegistry..................none\nmetricsTrackerFactory...........none\nminimumIdle.....................10\npassword........................\npoolName........................\"localHikariPool\"\nreadOnly........................false\nregisterMbeans..................false\nscheduledExecutor...............none\nschema..........................none\nthreadFactory...................internal\ntransactionIsolation............default\nusername........................\"postgres\"\nvalidationTimeout...............5000\n<\/pre>\n<ul class=\"wp-block-list\">\n<li>Line 24: the <code>max-life-time<\/code> need to be shorter than the proxy&#8217;s &#8220;<code>Idle Client Connection Timeout<\/code>&#8220;. Otherwise, you will see the <code>WARN<\/code> message from HikariPool: &#8220;<code>(This connection has been closed). Possibly consider a shorter maxLifeTime value<\/code>&#8220;.<\/li>\n<li>Line 28: the <code>minimum-idle<\/code> need to set to 0 as idle connection is not needed due to IAM auth token refreshes periodically.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">7. Conclusion<\/h2>\n<p>In this example, I created a Spring Data JPA Java application that outlines the <strong>datasource<\/strong> and <strong>hikari<\/strong> configuration changes when connecting to the RDS proxy.<\/p>\n<figure class=\"wp-block-table\">\n<table class=\"has-fixed-layout\">\n<tbody>\n<tr>\n<td><strong>Layer<\/strong><\/td>\n<td><strong>Authenticated By<\/strong><\/td>\n<td><strong>Managed By<\/strong><\/td>\n<td><strong>Scope<\/strong><\/td>\n<td><strong>Caches<\/strong><\/td>\n<td><strong>Time to Live<\/strong><\/td>\n<td><strong>Objective<\/strong><\/td>\n<td><strong>Reuse By<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Spring App -&gt; RDS Proxy<\/td>\n<td>IAM Auth Token<\/td>\n<td>Application<\/td>\n<td>JVM\/POD<\/td>\n<td>JDBC connection for queries via HikariCP pool<\/td>\n<td>Minutes<\/td>\n<td>Reduce Application latency<\/td>\n<td>Same application<\/td>\n<\/tr>\n<tr>\n<td>RDS Proxy -&gt; Database<\/td>\n<td>AWS Secrets Manager<\/td>\n<td>AWS Service<\/td>\n<td>Shared for cluster<\/td>\n<td>Read Database  Sessions via AWS RDS Proxy<\/td>\n<td>Hours<\/td>\n<td>Reduce Database Load<\/td>\n<td>Same database user, name, session state, and auth method<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<h2 class=\"wp-block-heading\">8. Download<\/h2>\n<p>This was an example of a Java project that outlined both data source and hikari configuration changes when connecting to RDS Proxy.<\/p>\n<div class=\"download\"><strong>Download<\/strong><br \/>\nYou can download the full source code of this example here: <a href=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2025\/11\/aws-rds-proxy.zip\"><strong>Spring Data JPA Switch to AWS RDS Proxy Example<\/strong><\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>1. Introduction AWS RDS Proxy is a fully managed, highly available database proxy for Amazon Relational Database Service(RDS). It sits between the application and the relational database to manage connections to the database and provides better scaling, resilience, and security. In this example, I will show the changes needed in a Spring Data JPA project &hellip;<\/p>\n","protected":false},"author":128892,"featured_media":238,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,6],"tags":[758,4790,2564],"class_list":["post-139085","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","category-java","tag-aws","tag-rds-proxy","tag-spring-data-jpa"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Spring Data JPA Switch to AWS RDS Proxy Example - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Interested to learn more about AWS RDS Proxy? then check out our detailed examples!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/spring-data-jpa-switch-to-aws-rds-proxy-example.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring Data JPA Switch to AWS RDS Proxy Example - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Interested to learn more about AWS RDS Proxy? then check out our detailed examples!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/spring-data-jpa-switch-to-aws-rds-proxy-example.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-27T09:24:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-27T09:24:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-data-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Mary Zheng\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mary Zheng\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-data-jpa-switch-to-aws-rds-proxy-example.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-data-jpa-switch-to-aws-rds-proxy-example.html\"},\"author\":{\"name\":\"Mary Zheng\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/33e795ab61de7fab61ed89b4de1668f5\"},\"headline\":\"Spring Data JPA Switch to AWS RDS Proxy Example\",\"datePublished\":\"2025-11-27T09:24:42+00:00\",\"dateModified\":\"2025-11-27T09:24:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-data-jpa-switch-to-aws-rds-proxy-example.html\"},\"wordCount\":654,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-data-jpa-switch-to-aws-rds-proxy-example.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-data-logo.jpg\",\"keywords\":[\"AWS\",\"RDS Proxy\",\"Spring Data JPA\"],\"articleSection\":[\"Enterprise Java\",\"Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-data-jpa-switch-to-aws-rds-proxy-example.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-data-jpa-switch-to-aws-rds-proxy-example.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-data-jpa-switch-to-aws-rds-proxy-example.html\",\"name\":\"Spring Data JPA Switch to AWS RDS Proxy Example - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-data-jpa-switch-to-aws-rds-proxy-example.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-data-jpa-switch-to-aws-rds-proxy-example.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-data-logo.jpg\",\"datePublished\":\"2025-11-27T09:24:42+00:00\",\"dateModified\":\"2025-11-27T09:24:45+00:00\",\"description\":\"Interested to learn more about AWS RDS Proxy? then check out our detailed examples!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-data-jpa-switch-to-aws-rds-proxy-example.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-data-jpa-switch-to-aws-rds-proxy-example.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-data-jpa-switch-to-aws-rds-proxy-example.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-data-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-data-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/spring-data-jpa-switch-to-aws-rds-proxy-example.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Spring Data JPA Switch to AWS RDS Proxy Example\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/33e795ab61de7fab61ed89b4de1668f5\",\"name\":\"Mary Zheng\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/cropped-Mary-Zheng-96x96.jpg\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/cropped-Mary-Zheng-96x96.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/cropped-Mary-Zheng-96x96.jpg\",\"caption\":\"Mary Zheng\"},\"description\":\"Mary graduated from the Mechanical Engineering department at ShangHai JiaoTong University. She also holds a Master degree in Computer Science from Webster University. During her studies she has been involved with a large number of projects ranging from programming and software engineering. She worked as a lead Software Engineer where she led and worked with others to design, implement, and monitor the software solution.\",\"sameAs\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/mary-zheng\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Spring Data JPA Switch to AWS RDS Proxy Example - Java Code Geeks","description":"Interested to learn more about AWS RDS Proxy? then check out our detailed examples!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/spring-data-jpa-switch-to-aws-rds-proxy-example.html","og_locale":"en_US","og_type":"article","og_title":"Spring Data JPA Switch to AWS RDS Proxy Example - Java Code Geeks","og_description":"Interested to learn more about AWS RDS Proxy? then check out our detailed examples!","og_url":"https:\/\/www.javacodegeeks.com\/spring-data-jpa-switch-to-aws-rds-proxy-example.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2025-11-27T09:24:42+00:00","article_modified_time":"2025-11-27T09:24:45+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-data-logo.jpg","type":"image\/jpeg"}],"author":"Mary Zheng","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Mary Zheng","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/spring-data-jpa-switch-to-aws-rds-proxy-example.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/spring-data-jpa-switch-to-aws-rds-proxy-example.html"},"author":{"name":"Mary Zheng","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/33e795ab61de7fab61ed89b4de1668f5"},"headline":"Spring Data JPA Switch to AWS RDS Proxy Example","datePublished":"2025-11-27T09:24:42+00:00","dateModified":"2025-11-27T09:24:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/spring-data-jpa-switch-to-aws-rds-proxy-example.html"},"wordCount":654,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/spring-data-jpa-switch-to-aws-rds-proxy-example.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-data-logo.jpg","keywords":["AWS","RDS Proxy","Spring Data JPA"],"articleSection":["Enterprise Java","Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/spring-data-jpa-switch-to-aws-rds-proxy-example.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/spring-data-jpa-switch-to-aws-rds-proxy-example.html","url":"https:\/\/www.javacodegeeks.com\/spring-data-jpa-switch-to-aws-rds-proxy-example.html","name":"Spring Data JPA Switch to AWS RDS Proxy Example - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/spring-data-jpa-switch-to-aws-rds-proxy-example.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/spring-data-jpa-switch-to-aws-rds-proxy-example.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-data-logo.jpg","datePublished":"2025-11-27T09:24:42+00:00","dateModified":"2025-11-27T09:24:45+00:00","description":"Interested to learn more about AWS RDS Proxy? then check out our detailed examples!","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/spring-data-jpa-switch-to-aws-rds-proxy-example.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/spring-data-jpa-switch-to-aws-rds-proxy-example.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/spring-data-jpa-switch-to-aws-rds-proxy-example.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-data-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-data-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/spring-data-jpa-switch-to-aws-rds-proxy-example.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Spring Data JPA Switch to AWS RDS Proxy Example"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/33e795ab61de7fab61ed89b4de1668f5","name":"Mary Zheng","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2024\/04\/cropped-Mary-Zheng-96x96.jpg","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2024\/04\/cropped-Mary-Zheng-96x96.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2024\/04\/cropped-Mary-Zheng-96x96.jpg","caption":"Mary Zheng"},"description":"Mary graduated from the Mechanical Engineering department at ShangHai JiaoTong University. She also holds a Master degree in Computer Science from Webster University. During her studies she has been involved with a large number of projects ranging from programming and software engineering. She worked as a lead Software Engineer where she led and worked with others to design, implement, and monitor the software solution.","sameAs":["https:\/\/www.javacodegeeks.com\/"],"url":"https:\/\/www.javacodegeeks.com\/author\/mary-zheng"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/139085","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/128892"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=139085"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/139085\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/238"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=139085"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=139085"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=139085"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}