es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo simular una conexión de base de datos perdida localmente?

Hay una aplicación basada en SpringBoot que se ejecuta en un servidor y que regularmente inserta/actualiza registros en una base de datos relacional.

La conexión a la base de datos se configura de la siguiente manera:

import org.springframework.context.annotation.Bean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import javax.sql.DataSource;

[...]

@Configuration
@EnableConfigurationProperties
public class DbConfigClass {

[...]

@Bean(name = "myDataSource")
@ConfigurationProperties(prefix = "com.mycompany.somedatabase")
public DataSource dsSomeDataSource() {
    return DataSourceBuilder.create().build();
}

[...]
}

A veces, la conexión se interrumpe en intervalos irregulares e impredecibles. En esos casos, obtengo errores como este:

java.sql.SQLTransientConnectionException: HikariPool-1 - La conexión no está disponible, el tiempo de espera de la solicitud superó los 30001ms.

at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:694)

Necesito asegurarme de que mi aplicación pueda manejar tales interrupciones. Para hacerlo, necesito poder reproducir este comportamiento localmente.

¿Cómo puedo hacerlo?

He investigado el uso de ToxyProxy en https://github.com/Shopify/toxiproxy, que parece hacer lo que necesito.

Sin embargo, me pregunto si puedo simular esas condiciones con menos esfuerzo, por ejemplo, utilizando Mockito.spy para modificar el origen de datos de manera que a veces arroje la excepción mencionada anteriormente.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para simular las interrupciones irregulares e impredecibles en la conexión a la base de datos localmente, se puede considerar el uso de una herramienta como ToxyProxy. Sin embargo, puede requerir cierto esfuerzo configurarla y aprender a utilizarla de manera efectiva. Alternativamente, se puede intentar utilizar Mockito.spy para modificar la fuente de datos de manera que ocasionalmente lance la excepción SQLTransientConnectionException. Este enfoque puede ser más rápido y fácil de configurar, pero es posible que no replique completamente las condiciones exactas que causan las interrupciones en el entorno de producción. Es importante evaluar cuidadosamente los compromisos entre el esfuerzo y la precisión al elegir un método para simular dicho comportamiento.

Comments are closed.