[2C] retry conexão após leak

Description

No dia 15/12/2025, durante o projeto de ingestão dos dados de receita recorrente via 2C, foi identificado que, após um leak no banco de dados, o 2C perdeu a conexão. Para que o envio dos dados fosse retomado, foi necessária a reinicialização manual da conexão 2C.
Objetivo: Implementar um mecanismo de retry automático no 2C, permitindo a reconexão em caso de perda de conexão, sem a necessidade de intervenção manual.


log do cliente dia 15/12/25

``` [2025-12-15 18:04:20.842] [WARN ] c.z.h.p.ProxyLeakTask - Connection leak detection triggered for oracle.jdbc.driver.T4CConnection@19a5d4e5 on thread scheduling-1, stack trace follows \njava.lang.Exception: Apparent connection leak detected\n at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:100)\n at org.jdbi.v3.core.Jdbi.open(Jdbi.java:303)\n at com.totvslabs.mdm.db.exec.CallerWithHandler.call(CallerWithHandler.java:60)\n at com.totvslabs.mdm.db.exec.CallerWithHandler.call(CallerWithHandler.java:46)\n at com.totvslabs.mdm.db.exec.CallerWithHandler.call(CallerWithHandler.java:51)\n at com.totvslabs.mdm.db.AbstractConnectionDao.getFieldList(AbstractConnectionDao.java:2165)\n at com.totvslabs.mdm.db.metadata.MetadataExtractorImpl.getFieldList(MetadataExtractorImpl.java:43)\n at com.totvslabs.mdm.app.api.entity.EntityCarolSchemaManager.getSchemaForTable(EntityCarolSchemaManager.java:447)\n at com.totvslabs.mdm.app.api.entity.EntityCarolSchemaManager.validatedCarolSchema(EntityCarolSchemaManager.java:357)\n at com.totvslabs.mdm.app.job.FetchPendingRecordsJob.lambda$executePendingRecords$2(FetchPendingRecordsJob.java:109)\n at java.base/java.util.HashMap.forEach(HashMap.java:1337)\n at com.totvslabs.mdm.app.job.FetchPendingRecordsJob.executePendingRecords(FetchPendingRecordsJob.java:87)\n at com.totvslabs.mdm.app.job.FetchPendingRecordsJob.doJob(FetchPendingRecordsJob.java:76)\n at jdk.internal.reflect.GeneratedMethodAccessor462.invoke(Unknown Source)\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.base/java.lang.reflect.Method.invoke(Method.java:566)\n at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84)\n at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)\n at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)\n at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)\n at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)\n at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n at java.base/java.lang.Thread.run(Thread.currentThread());```