From eb24f8690d96423f011d8271760ce5667d050d8a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 10 Nov 2025 19:07:18 +0000 Subject: [PATCH 1/3] Fix database performance: Add connection pooling and timeout optimizations --- .../pet_clinic_insurance_service/settings.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/pet_clinic_insurance_service/pet_clinic_insurance_service/settings.py b/pet_clinic_insurance_service/pet_clinic_insurance_service/settings.py index b159fb30..06fd57d4 100644 --- a/pet_clinic_insurance_service/pet_clinic_insurance_service/settings.py +++ b/pet_clinic_insurance_service/pet_clinic_insurance_service/settings.py @@ -117,6 +117,14 @@ def get_secret_value(secret_name: str, region_name: str) -> str: "PASSWORD": DB_PASSWORD, "HOST": os.environ.get("DB_SERVICE_HOST"), "PORT": os.environ.get("DB_SERVICE_PORT"), + # Database connection pool optimization + "CONN_MAX_AGE": 600, # Keep connections alive for 10 minutes + "OPTIONS": { + "MAX_CONNS": 20, # Maximum number of connections + "MIN_CONNS": 5, # Minimum number of connections + "connect_timeout": 10, # Connection timeout in seconds + "options": "-c default_transaction_isolation=read_committed" + } } } @@ -138,6 +146,11 @@ def get_secret_value(secret_name: str, region_name: str) -> str: 'level': 'INFO', 'propagate': True, }, + 'django.db.backends': { + 'handlers': ['console'], + 'level': 'WARNING', # Log slow queries + 'propagate': False, + }, }, } @@ -180,4 +193,4 @@ def get_secret_value(secret_name: str, region_name: str) -> str: # Default primary key field type # https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field -DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" +DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" \ No newline at end of file From 90e4d9ae78a50491e9ac1a7070a2e420aa50a67a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 10 Nov 2025 19:07:44 +0000 Subject: [PATCH 2/3] Fix HTTP client timeouts to prevent ResourceAccessException --- .../src/main/resources/application.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/spring-petclinic-customers-service/src/main/resources/application.yml b/spring-petclinic-customers-service/src/main/resources/application.yml index 26e1025f..5ffb2407 100644 --- a/spring-petclinic-customers-service/src/main/resources/application.yml +++ b/spring-petclinic-customers-service/src/main/resources/application.yml @@ -4,6 +4,18 @@ spring: config: import: optional:configserver:${CONFIG_SERVER_URL:http://localhost:8888/} +# HTTP client timeout configuration to prevent ResourceAccessException +server: + tomcat: + connection-timeout: 60000 # 60 seconds + keep-alive-timeout: 60000 + +# RestTemplate and WebClient timeout configuration +rest: + client: + connection-timeout: 30000 # 30 seconds + read-timeout: 60000 # 60 seconds + eureka: instance: preferIpAddress: true @@ -16,6 +28,7 @@ logging: root: OFF org.springframework.samples.petclinic.customers.web.PetResource: INFO org.springframework.samples.petclinic.customers.aws.SqsService: FATAL + org.springframework.web.client.RestTemplate: WARN # Log HTTP client errors pattern: level: trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p From e508bb5a5a04ad642747fd56c1aff303887a78de Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 10 Nov 2025 19:08:18 +0000 Subject: [PATCH 3/3] Fix Hibernate StackOverflowError in deleteAllInBatch with native query --- .../customers/model/OwnerRepository.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/model/OwnerRepository.java b/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/model/OwnerRepository.java index aa720f24..ae272cb5 100644 --- a/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/model/OwnerRepository.java +++ b/spring-petclinic-customers-service/src/main/java/org/springframework/samples/petclinic/customers/model/OwnerRepository.java @@ -16,6 +16,9 @@ package org.springframework.samples.petclinic.customers.model; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; /** * Repository class for Owner domain objects All method names are compliant with Spring Data naming @@ -27,4 +30,14 @@ * @author Michael Isvy * @author Maciej Szarlinski */ -public interface OwnerRepository extends JpaRepository { } +public interface OwnerRepository extends JpaRepository { + + /** + * Custom delete method to prevent StackOverflowError in deleteAllInBatch + * Uses native SQL to avoid Hibernate HQL parsing issues + */ + @Modifying + @Transactional + @Query(value = "DELETE FROM owners", nativeQuery = true) + void deleteAllOwners(); +} \ No newline at end of file