2012-09-12 21 views
7

Estoy compilando una aplicación Spring y necesito inspeccionar mi base de datos en memoria H2 mientras estoy ejecutando mis pruebas JUnit desde un navegador web.Acceso a la consola web h2 mientras ejecuta la prueba junit en una aplicación Spring

En mi configuración Spring tengo un bean que es responsable de crear mi esquema de base de datos y rellenarlo con algunos datos que se utilizarán en mis pruebas JUnit. También agregué un bean en el contexto de prueba, que crea un servidor web donde eventualmente buscaré mis datos.

<bean id="org.h2.tools.Server-WebServer" class="org.h2.tools.Server" 
    factory-method="createWebServer" init-method="start" lazy-init="false"> 
    <constructor-arg value="-web,-webAllowOthers,-webPort,11111" /> 
</bean> 

Todo parece bien porque la base de datos se rellena correctamente ya que puedo acceder a sus datos de mis pruebas JUnit y H2 Server sólo funciona mientras estoy en mi prueba de fase (I puedo saber eso, porque si Intente acceder a my_ip: 111111 antes de depurar mis pruebas. No puedo conectarme, pero puedo conectarme después una vez que haya comenzado mis pruebas.

De todas formas, si abro mi consola H2 desde un navegador web, no aparece ningún esquema en ella. ¿¿Algunas ideas??

Muchas gracias !!

+1

¿Cómo son tus jdbcUrl en las pruebas unitarias? – michael

+0

Hola Michael, gracias por tu respuesta.Mi URL jdbc se parece a jdbc: h2: mem: mi_DB; DB_CLOSE_DELAY = -1; MODE = Oracle También intenté agregar la propiedad IFEXIST en la URL de jdbc por si acaso eso pudiera ayudarme. No pudo :( –

+0

Hola @Ivan Fernández, ¿puede decirnos cómo ha resuelto este problema? Estoy enfrentando el mismo problema. Su respuesta es muy apreciada. Gracias! – ROCKY

Respuesta

2

Supongo que el problema es que se está conectando a h2db directamente desde su aplicación. No a través del servidor que está iniciando con bean. Debido a esto, su aplicación y h2db-web-interface no pueden compartir una base de datos en memoria.

Debe cambiar jdbcUrl en pruebas a algo como jdbc:h2:tcp://localhost/mem:my_DB;DB_CLOSE_DELAY=-1;MODE=Oracle y en el navegador debe conectarse a la misma url.

Con las URL de jdbc como jdbc:h2:tcp://localhost/..., todas las conexiones pasarán por el servidor h2db y podrá ver el estado de la base de datos en el navegador.

6

Como este es probablemente va a ser una característica de prueba de depuración, se puede añadir en tiempo de ejecución con su @Before:

import org.h2.tools.Server; 

/* Initialization logic here */ 

@Before 
public void initTest(){ 
    Server webServer = Server.createWebServer("-web", 
            "-webAllowOthers", "-webPort", "8082"); 
    webServer.start(); 
} 

Y luego conectarse a http://localhost:8082/

2

Para el futuro referencia aquí hay otra manera de hacerlo:

  1. Base de datos de inicio y servidores web (versión puede variar):

    $ cd .../maven_repository/com/h2database/h2/1.4.194 $ java -cp h2-1.4.194.jar org.h2.tools.Server -tcp -web -browser TCP server running at tcp://169.254.104.55:9092 (only local connections) Web Console server running at http://169.254.104.55:8082 (only local connections)

  2. conjunto de direcciones URL base de datos para pruebas en el código para jdbc:h2:tcp://localhost:9092/mem:mytest.

  3. Ejecutar o depurar pruebas.
  4. Haga clic en la ventana del navegador Connect que se abrió en el paso 1.

archivo JAR para H2 se puede descargar en https://mvnrepository.com/artifact/com.h2database/h2.

El servidor se puede iniciar a través de @Before en el archivo de prueba como en la respuesta de snovelli, pero solo en caso de que la conexión con la base de datos se establezca posteriormente, lo que podría ser un problema.

Cuestiones relacionadas