2012-02-16 234 views
20

Cómo iniciar la base de datos H2 en el modo de servidor. Tengo que empezar desde mi application.I intentado el siguiente código:¿Cómo ejecutar la base de datos H2 en modo servidor?

server = Server.createTcpServer().start(); 

Aquí es las propiedades de la conexión:

javabase.jdbc.url = jdbc:h2:tcp://localhost:9092/nio:~/source/db/database/db;AUTO_SERVER=TRUE 
javabase.jdbc.driver = org.h2.Driver 
javabase.jdbc.username = sa 
javabase.jdbc.password = 

Cuando ejecuto el programa me dieron el siguiente error:

client.db.exception.DAOException: org.h2.jdbc.JdbcSQLException: Database may be already in use: "Locked by another process". Possible solutions: close all other connection(s); use the server mode [90020-164] 
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) 
    at org.h2.message.DbException.get(DbException.java:169) 
    at org.h2.message.DbException.get(DbException.java:146) 
    at org.h2.store.FileLock.getExceptionAlreadyInUse(FileLock.java:439) 
    at org.h2.store.FileLock.lockFile(FileLock.java:336) 
    at org.h2.store.FileLock.lock(FileLock.java:128) 
    at org.h2.engine.Database.open(Database.java:542) 
    at org.h2.engine.Database.openDatabase(Database.java:222) 
    at org.h2.engine.Database.<init>(Database.java:217) 
    at org.h2.engine.Engine.openSession(Engine.java:56) 
    at org.h2.engine.Engine.openSession(Engine.java:159) 
    at org.h2.engine.Engine.createSessionAndValidate(Engine.java:138) 
    at org.h2.engine.Engine.createSession(Engine.java:121) 
    at org.h2.server.TcpServerThread.run(TcpServerThread.java:133) 
    at java.lang.Thread.run(Thread.java:680) 

Gracias,

+3

http://www.h2database.com/html/tutorial.html#using_server –

+1

Esto no funciona para mí –

+1

OK ... quiero decir, por favor sea más específico . ¿Por qué esto no funciona? ¿Qué quieres lograr? ¿Qué has intentado hasta ahora? –

Respuesta

24

Como dice el mensaje de excepción, "Base de datos puede estar ya en uso" . Debe cerrar todas las otras conexiones para asegurarse de que la base de datos no esté abierta en otro proceso al mismo tiempo.

Por cierto, no use AUTO_SERVER = TRUE y el modo de servidor al mismo tiempo. Consulte la documentación del automatic mixed mode. Usa cualquiera de los dos.

Supongo que está un poco confundido acerca de los diferentes modos de conexión. Sugiero leer the documentation about the connection modes, para asegurarse de que lo entiende.

+1

El mensaje de excepción da la impresión de que ejecutar la base de datos en 'modo incrustado' solo permite 1 conexión, mientras que ponerla en' modo de servidor' permitirá múltiples conexiones. ¿No es ese el caso? – bvdb

+0

No, ese no es el caso. Ver la documentación. –

+2

@ Thomas - He escaneado varias publicaciones, y sigo viendo que diga que mire la documentación. Por favor no hagas eso. La documentación, especialmente alrededor de startTcpServer, es dispersa en el mejor de los casos. El servidor se inicia y se puede apagar de forma remota, pero rechaza todas las conexiones. – Steve11235

11

Puede usar el siguiente código para ejecutar H2 en modo de servidor.

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
destroy-method="close"> 
<property name="driverClassName" value="org.h2.Driver" /> 
<property name="url" value="jdbc:h2:target/h2/ps;AUTO_SERVER=TRUE" /> 
<property name="username" value="sa" /> 
<property name="password" value="" /> 
</bean> 

puede utilizar el cliente SQL SQuirreL (http://squirrel-sql.sourceforge.net/) para conectarse a la base de datos que H2 y mirar las tablas.

  1. Crear nueva conexión.
  2. Seleccionar H2 en el menú desplegable controlador
  3. conjunto de direcciones URL a la carpeta h2 carpeta de destino del proyecto (JDBC: H2: C: \ projects \ espacio de trabajo \ TestProject \ diana/h2/ps; AUTO_SERVER = true)
  4. Introduzca nombre de usuario ("SA")
  5. Introduzca la contraseña ("")
+0

org.h2.jdbc.JdbcSQLException: una ruta de archivo que está implícitamente relacionada con el directorio de trabajo actual no está permitida en la URL de la base de datos "jdbc: h2: target/h2/ps; AUTO_SERVER = TRUE". Use una ruta de acceso absoluta, ~/name, ./name, o la configuración de baseDir en su lugar. [90011-196] –

15

Desde la línea de comandos,

java -jar h2-1.3.160.jar -webAllowOthers -tcpAllowOthers 

este pondrá en marcha una base de datos de H2 en el modo de servidor:

Web Console server running at http://A.B.C.D:8082 (others can connect) Failed to start a browser to open the URL http://A.B.C.D:8082 : Browser detection failed and system property h2.browser not set TCP server running at tcp://A.B.C.D:9092 (others can connect) PG server running at pg://A.B.C.D:5435 (only local connections)

abrir un navegador para tener una GUI de administración

+0

Al usar este enfoque, ¿cómo se aumenta la cantidad máxima de conexiones permitidas? –

+0

Éste me funcionó. Especialmente, preste atención al puerto TCP predeterminado: 9092 (¡se puede ajustar usando -tcpPort)! – Lars

2

Cierre todas las aplicaciones que utilizan H2 (consola web, etc) Luego se agrega el AUTO_SERVER = true al final de la ubicación en la consola de H2 y también en el programa Java (que ya ha hecho)

+0

Gracias, funciona genial. –

Cuestiones relacionadas