2012-09-12 34 views
7

Tôi đang xây dựng ứng dụng Spring và tôi cần kiểm tra cơ sở dữ liệu trong bộ nhớ H2 của mình trong khi đang chạy các kiểm tra JUnit từ trình duyệt web.Truy cập vào giao diện điều khiển web trong khi chạy thử nghiệm junit trong ứng dụng Spring

Trong cấu hình Spring, tôi có một bean chịu trách nhiệm tạo lược đồ cơ sở dữ liệu của tôi và điền nó với một số dữ liệu sẽ được sử dụng trong các bài kiểm tra JUnit của tôi. Tôi cũng đã thêm một bean trong ngữ cảnh thử nghiệm của mình để tạo ra một máy chủ web, nơi cuối cùng tôi sẽ tìm kiếm dữ liệu của tôi.

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

Tất cả mọi thứ có vẻ ok vì cơ sở dữ liệu được phổ biến đúng cách kể từ khi tôi có thể truy cập vào dữ liệu của mình từ các bài kiểm tra JUnit tôi và H2 Server chỉ chạy trong khi tôi đang trong thử nghiệm pha của tôi (tôi có thể biết rằng, bởi vì nếu tôi cố gắng truy cập vào my_ip: 111111 trước khi gỡ lỗi các thử nghiệm của tôi Tôi không thể kết nối nhưng sau này tôi có thể kết nối sau khi tôi đã bắt đầu thử nghiệm của mình).

Dù sao Nếu tôi mở bảng điều khiển H2 của mình từ trình duyệt web thì không có lược đồ nào được hiển thị trong đó. Bất kỳ ý tưởng ??

Rất cám ơn !!

+1

Kiểm tra đơn vị jdbcUrl của bạn trông như thế nào? – michael

+0

Xin chào Michael, cảm ơn câu trả lời của bạn.URL jdbc của tôi trông giống như jdbc: h2: mem: my_DB; DB_CLOSE_DELAY = -1; MODE = Oracle Tôi cũng đã cố thêm thuộc tính IFEXIST vào URL jdbc trong trường hợp có thể giúp tôi. Nó không thể: ( –

+0

Xin chào @Ivan Fernandez bạn có thể cho chúng tôi biết cách bạn giải quyết vấn đề này không? Tôi đang đối mặt với cùng một vấn đề. Bạn trả lời được đánh giá cao. Cảm ơn !! – ROCKY

Trả lời

2

Tôi đoán vấn đề là bạn đang kết nối trực tiếp với h2db từ ứng dụng của mình. Không phải thông qua máy chủ bạn đang khởi chạy với bean. Bởi vì điều này ứng dụng của bạn và giao diện h2db-web không thể chia sẻ một cơ sở dữ liệu trong bộ nhớ.

Bạn nên thay đổi jdbcUrl trong các thử nghiệm thành một cái gì đó như jdbc:h2:tcp://localhost/mem:my_DB;DB_CLOSE_DELAY=-1;MODE=Oracle và trong trình duyệt, bạn nên kết nối với cùng một url.

Với các url jdbc như jdbc:h2:tcp://localhost/... tất cả các kết nối sẽ đi qua máy chủ h2db và bạn có thể xem trạng thái cơ sở dữ liệu trong trình duyệt.

6

Vì đây có lẽ sẽ là một tính năng thử gỡ lỗi, bạn có thể thêm nó khi chạy với bạn @Before:

import org.h2.tools.Server; 

/* Initialization logic here */ 

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

Và sau đó kết nối với http://localhost:8082/

2

Đối với tương lai tham chiếu dưới đây là một cách khác để thực hiện:

  1. Bắt đầu cơ sở dữ liệu và các máy chủ web (phiên bản có thể khác nhau):

    $ 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. Set url cơ sở dữ liệu cho các bài kiểm tra trong mã để jdbc:h2:tcp://localhost:9092/mem:mytest.

  3. Chạy hoặc gỡ lỗi kiểm tra.
  4. Bấm Connect trong cửa sổ trình duyệt mà mở ở bước 1.

file Jar cho H2 có thể được tải về tại https://mvnrepository.com/artifact/com.h2database/h2.

Máy chủ có thể được bắt đầu qua @Before trong tệp thử nghiệm như trong câu trả lời của snovelli, nhưng chỉ trong trường hợp kết nối với cơ sở dữ liệu được thiết lập sau đó, có thể là một vấn đề.

Các vấn đề liên quan