2009-10-01 26 views
10

Tôi đang cố gắng khởi động cơ sở dữ liệu H2 ở chế độ máy chủ (Tôi muốn nó chạy trong một quy trình khác) qua Spring. Hiện nay tôi đang sử dụng java Runnable.exec để bắt đầu cơ sở dữ liệu h2 (sử dụng lệnh: "java -cp h2.jar org.h2.tools.Server")Khởi động cơ sở dữ liệu H2 ở chế độ máy chủ qua Spring

Tôi biết rằng có một cách để làm điều đó thông qua mùa xuân. Tôi cố gắng để thêm dòng sau vào cấu hình mùa xuân, nhưng nó đã không làm việc (nó không khởi động cơ sở dữ liệu H2):

<bean id="org.h2.tools.Server" class="org.h2.tools.Server" 
     factory-method="createTcpServer" init-method="start" destroy-method="stop"> 
     <constructor-arg value="-tcp,-tcpAllowOthers,true,-tcpPort,8043" /> 
    </bean> 

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

tôi sẽ đánh giá cao bất kỳ sự giúp đỡ/ý tưởng

+0

Bất kỳ thông báo lỗi nào được in? –

Trả lời

11

Bạn có xảy ra để có:

<beans default-lazy-init="true" ... 

trong file cấu hình Spring của bạn?

+0

Tôi đã thay đổi cấu hình bean thành lazy-init = "false". Nó hoạt động ngay bây giờ. Cảm ơn bạn! – Lin

+0

+1 bắt tốt ... – skaffman

1

Bạn có chắc chắn Phương pháp createTcpServer trong lớp Server thực sự được gọi? Bạn đã thử thiết lập một điểm dừng ở đó chưa?

H2 tutorial tuyên bố này làm thế nào bạn có thể tạo và khởi động server lập trình:

import org.h2.tools.Server; 
... 
// start the TCP Server 
Server server = Server.createTcpServer(args).start(); 
... 
// stop the TCP Server 
server.stop(); 

định nghĩa mùa xuân của bạn dường như mimick việc khởi tạo tương tự. Nhưng bạn luôn có thể thử làm theo cách thủ công - có thể đó là một số lỗi trong cấu hình Spring.

EDIT:

Tôi đã thử cấu hình của bạn và nó hoạt động cho tôi. Điều gì làm cho bạn nghĩ rằng máy chủ không được bắt đầu? Nó không in ra bất cứ điều gì trên stdout, tuy nhiên quá trình lắng nghe tại cổng 8043. Vì vậy, nó có vẻ khá OK.

3

Gần đây tôi phải thực hiện cùng một cấu hình để kiểm tra đơn vị và kiểm tra dữ liệu, điều này phù hợp với tôi (Mùa xuân 3.1.4). Sau đó, bạn chỉ cần kết nối với jdbc: h2: tcp: // localhost: 8043/mem: kiểm tra và đảm bảo đặt một khoảng thời gian (true) {} vào cuối bài kiểm tra của bạn.

<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:mem:;TRACE_LEVEL_FIlE=4"/--> 
    <property name="url" value="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"/> 
    <property name="username" value="sa"/> 
    <property name="password" value=""/> 
</bean> 
<bean class="org.h2.tools.Server" factory-method="createTcpServer" init-method="start" destroy-method="stop"> 
    <constructor-arg> 
     <array> 
      <value>-tcp</value> 
      <value>-tcpAllowOthers</value> 
      <value>-tcpPort</value> 
      <value>8043</value> 
     </array> 
    </constructor-arg> 
</bean> 
Các vấn đề liên quan