2012-02-16 12 views
20

Jak uruchomić bazę danych H2 w trybie serwera. Muszę zacząć go od mojego application.I próbowałem następujący kod:Jak uruchomić bazę danych H2 w trybie serwera?

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

Oto właściwości połączenia:

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 = 

Kiedy uruchamiam program mam następujący błąd:

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) 

Dzięki

+3

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

+1

To nie działa dla mnie –

+1

OK ... mam na myśli - proszę być bardziej szczegółowym . Dlaczego to nie działa? Co chcesz osiągnąć? Czego spróbowałeś do tej pory? –

Odpowiedz

24

Jak mówi komunikat wyjątku, „Baza danych może być już w użyciu” . Musisz zamknąć wszystkie inne połączenia, aby upewnić się, że baza danych nie jest otwarta jednocześnie w innym procesie.

Nawiasem mówiąc, nie należy używać trybu AUTO_SERVER = TRUE i w trybie serwera w tym samym czasie. Zobacz dokumentację dla automatic mixed mode. Użyj jednego.

Domyślam się, że jesteś nieco zdezorientowany różnymi trybami połączenia. Proponuję przeczytać the documentation about the connection modes, aby się upewnić, że to rozumiesz.

+1

Komunikat o wyjątku sprawia wrażenie, że uruchomienie bazy danych w 'trybie osadzonym' pozwala tylko na 1 połączenie, natomiast umieszczenie go w' trybie serwera' pozwoli na wiele połączeń. Czy tak nie jest? – bvdb

+0

Nie, tak nie jest. Zobacz dokumentację. –

+2

@ Thomas - Przeszukałem wiele postów i wciąż widzę, jak mówisz, aby przejrzeć dokumentację. Proszę tego nie robić. Dokumentacja, szczególnie wokół startTcpServer, jest w najlepszym wypadku rzadka. Serwer uruchamia się i można go zdalnie zamknąć, ale odrzuca wszystkie połączenia. – Steve11235

11

Możesz użyć następującego kodu, aby uruchomić H2 w trybie serwera.

<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> 

Można używać klienta Wiewiórka SQL (http://squirrel-sql.sourceforge.net/), aby połączyć ciebie bazę H2 i spojrzeć na stołach.

  1. Utwórz nowe połączenie.
  2. Wybierz H2 w menu rozwijanym kierowca
  3. SET URL do folderu folder docelowy h2 projektu (JDBC: h2: C: \ Projects \ workspace \ TestProject \ docelowe/h2/PS; AUTO_SERVER = true)
  4. Wpisz Nazwa użytkownika ("sa")
  5. Wprowadź hasło ("")
+0

org.h2.jdbc.JdbcSQLException: Ścieżka pliku, która jest niejawnie względem bieżącego katalogu roboczego, nie jest dozwolona w adresie URL bazy danych "jdbc: h2: cel/h2/ps; AUTO_SERVER = TRUE". Zamiast tego użyj bezwzględnej ścieżki, ~/name, ./name lub ustawienia baseDir. [90011-196] –

15

z linii poleceń,

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

to uruchomi bazę danych h2 w trybie serwera:

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)

otworzyć przeglądarkę mieć GUI Admin

+0

Podczas korzystania z tego podejścia, jak zwiększyć maksymalną liczbę dozwolonych połączeń? –

+0

Ten pracował dla mnie. Zwróć szczególną uwagę na domyślny port TCP: 9092 (można go zmienić za pomocą opcji -tcpPort)! – Lars

2

zamknąć wszystkie aplikacje, które za pomocą H2 (konsoli internetowej itp) następnie dodać AUTO_SERVER = TRUE do końca miejscu w h2 konsoli, a także w programie java (który już zrobiłeś)

+0

Dzięki, działa świetnie. –

Powiązane problemy