see - spring boot test h2
Ver contenido de la base de datos H2 incorporada iniciada por Spring (6)
Al utilizar Spring Boot, puede registrar el Servlet de la Consola H2 de la siguiente manera:
@Bean
public ServletRegistrationBean h2servletRegistration() {
ServletRegistrationBean registration = new ServletRegistrationBean(new WebServlet());
registration.addUrlMappings("/console/*");
registration.addInitParameter("webAllowOthers", "true");
return registration;
}
Si desea que la consola esté disponible de forma remota, la línea importante es el addInitParameter
para configurar "webAllowOthers"
en "true"
.
Me gustaría ver en un navegador web el contenido de la base de datos H2 iniciado por Spring gracias a la siguiente configuración:
<jdbc:embedded-database id="dataSource" type="H2" />
<jdbc:initialize-database data-source="dataSource">
<jdbc:script location="classpath:db/populateDB.sql"/>
</jdbc:initialize-database>
Busqué la URL de JDBC en los registros:
DEBUG o.s.j.d.SimpleDriverDataSource - Creating new JDBC Driver Connection to [jdbc:h2:mem:dataSource;DB_CLOSE_DELAY=-1]
Para que yo pudiera llenar el formulario de conexión de la siguiente manera:
Pero desafortunadamente, la base de datos todavía está vacía, mientras que no debería hacerlo debido a la secuencia de comandos populateDB.sql.
¿Alguna idea?
¡Gracias!
Casi la misma pregunta que Ver contenido de la base de datos en memoria H2 o HSQLDB .
Simplemente agregue lo siguiente a su configuración.
<bean id="h2Server" class="org.h2.tools.Server" factory-method="createTcpServer" init-method="start" destroy-method="stop" depends-on="h2WebServer">
<constructor-arg value="-tcp,-tcpAllowOthers,-tcpPort,9092"/>
</bean>
<bean id="h2WebServer" class="org.h2.tools.Server" factory-method="createWebServer" init-method="start" destroy-method="stop">
<constructor-arg value="-web,-webAllowOthers,-webPort,8082"/>
</bean>
Esto iniciará la consola web H2 y el servidor TCP en la misma JVM que la base de datos integrada para que pueda acceder al puerto 8082 con su navegador web (ingrese jdbc: h2: mem: dataSource como URL), o el puerto 9092 con un cliente SQL externo como SQuirreLSQL y ver los mismos datos.
Con Spring Boot puede hacer esto con un par de configuraciones en el archivo application.properties.
spring.h2.console.enabled=true
spring.h2.console.path=/console/
Luego puede acceder a la consola web h2 en http://localhost:8080/console/ . La configuración de inicio de sesión predeterminada debería funcionar a menos que las cambie.
Ver documentation bota de primavera.
Cuando se utiliza un objeto embebido con la configuración xml jdbc, el nombre predeterminado de la base de datos es ''testdb''
Trate de usar en su conexión url:
jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
La URL de la base de datos jdbc:h2:mem:dataSource
significa que está utilizando una base de datos en memoria. Ahora, si inicia un segundo proceso Java y se conecta a esta base de datos, terminará teniendo dos bases de datos en memoria (una para cada proceso).
Si desea conectarse a la base de datos existente, tiene múltiples opciones:
Conéctese a la base de datos desde el mismo proceso. No empieces un segundo proceso.
Utilice una base de datos persistente, con una ruta absoluta codificada, por ejemplo: `jdbc: h2: / data / db / dataSource ''.
Más complicado / no recomendado: si inicia un segundo proceso, en teoría podría conectarse a una base de datos en memoria utilizando el modo de servidor. Pero eso significa que necesita iniciar el servidor donde ejecutó la prueba.
Para aquellos que desean una configuración de Java Config, es bastante fácil de hacer, así como inicializar el servidor TCP al implementar ServletContextInitializer y encadenar el servidor de consola ...
@Configuration
public class WebConfig implements ServletContextInitializer{
...
@Override
public void onStartup( ServletContext servletContext )
//do stuff onStartUp...
initH2TCPServer( servletContext );
....
@Bean(initMethod="start", destroyMethod="stop")
public Server initH2TCPServer(ServletContext servletContext) {
log.debug( "Initializing H2 TCP Server" );
try {
server = Server.createTcpServer( "-tcp", "-tcpAllowOthers", "-tcpPort", "9092" );
} catch( SQLException e ) {
e.printStackTrace();
} finally {
//Always return the H2Console...
initH2Console( servletContext );
}
return server;
}
public void initH2Console( ServletContext servletContext ) {
log.debug( "Initializing H2 console" );
ServletRegistration.Dynamic h2ConsoleServlet = servletContext.addServlet(
"H2Console", new org.h2.server.web.WebServlet() );
h2ConsoleServlet.addMapping( "/console/*" );
);
}