2012-09-12 15 views
7

मैं एक स्प्रिंग एप्लिकेशन बना रहा हूं और मुझे अपने एच 2 इन-मेमोरी डेटाबेस का निरीक्षण करने की आवश्यकता है, जबकि मैं अपने वेब ब्राउजर से अपने जुनीट परीक्षण चला रहा हूं।स्प्रिंग एप्लिकेशन में जूनिट टेस्ट चलाने के दौरान एच 2 वेब कंसोल तक पहुंच

मेरी वसंत विन्यास में मेरे पास एक बीन है जो मेरी डेटाबेस स्कीमा बनाने और इसे कुछ डेटा के साथ पॉप्युलेट करने के लिए जिम्मेदार है जिसका उपयोग मेरे जुनीट परीक्षणों में किया जाएगा। मैंने अपने परीक्षण संदर्भ में एक बीन भी जोड़ा है जो एक वेब सर्वर बनाता है जहां मैं अंततः अपने डेटा की तलाश करूंगा।

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

सब कुछ ठीक लगता है क्योंकि डेटाबेस ठीक से से भर जाता है के बाद से मैं अपने JUnit परीक्षण से अपने डेटा के लिए उपयोग कर सकते हैं और एच 2 सर्वर केवल चलाता है, जबकि मैं अपने परीक्षण चरण में हूँ (मुझे लगता है कि पता कर सकते हैं, क्योंकि अगर मैं मेरे परीक्षणों को डीबग करने से पहले my_ip: 111111 तक पहुंचने का प्रयास करें, मैं कनेक्ट नहीं कर सकता लेकिन बाद में मैं अपने परीक्षण शुरू करने के बाद कनेक्ट कर सकता हूं)।

वैसे भी अगर मैं किसी वेब ब्राउज़र से अपना एच 2 कंसोल खोलता हूं तो इसमें कोई स्कीमा दिखाई नहीं दे रहा है। कोई विचार??

बहुत धन्यवाद !!

+1

यूनिट परीक्षणों में आपका jdbcUrl कैसा दिखता है? – michael

+0

हाय माइकल, आपके उत्तर के लिए धन्यवाद।मेरा जेडीबीसी यूआरएल जेडीबीसी जैसा दिखता है: एच 2: एमएम: my_DB; डीबी_CLOSE_DELAY = -1; MODE = ओरेकल मैंने जेएफबीसी यूआरएल में आईएफएक्सआईएसटी संपत्ति को जोड़ने की कोशिश की है, अगर वह मेरी मदद कर सके। यह नहीं कर सका :( –

+0

हैलो @ इवान फर्नांडीज क्या आप हमें बता सकते हैं कि आपने इस समस्या को कैसे हल किया है? मुझे एक ही समस्या का सामना करना पड़ रहा है। आप उत्तर की बहुत सराहना करते हैं। धन्यवाद !! – ROCKY

उत्तर

2

मुझे लगता है कि समस्या यह है कि आप सीधे अपने आवेदन से h2db से कनेक्ट हो रहे हैं। सर्वर के माध्यम से आप बीन के साथ लॉन्च कर रहे हैं। इस वजह से आपका ऐप और एच 2 डीबी-वेब-इंटरफेस एक इन-मेमोरी डेटाबेस साझा नहीं कर सकता है।

आपको jdbc:h2:tcp://localhost/mem:my_DB;DB_CLOSE_DELAY=-1;MODE=Oracle जैसे कुछ परीक्षणों में jdbcUrl को बदलना चाहिए और ब्राउज़र में आपको उसी यूआरएल से कनेक्ट होना चाहिए।

jdbc urls जैसे jdbc:h2:tcp://localhost/... सभी कनेक्शन h2db-server के माध्यम से जाएंगे और आप ब्राउज़र में डेटाबेस स्थिति देख सकते हैं।

6

इस रूप में शायद एक परीक्षण डिबगिंग सुविधा होने जा रहा है, तो आप कार्यावधि में जोड़ सकते हैं अपने @Before साथ:

import org.h2.tools.Server; 

/* Initialization logic here */ 

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

और फिर http://localhost:8082/

2

भविष्य के लिए करने के लिए कनेक्ट संदर्भ यहां करने का दूसरा तरीका है:

  1. प्रारंभ डेटाबेस और वेब सर्वर (संस्करण अलग हो सकता है): jdbc:h2:tcp://localhost:9092/mem:mytest करने के लिए कोड में परीक्षण के लिए

    $ 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. सेट डेटाबेस यूआरएल।

  3. परीक्षण चलाएं या डीबग करें। ब्राउज़र विंडो में
  4. क्लिक करें Connect जो कदम में एच 2 के लिए 1.

जार फ़ाइल खोली https://mvnrepository.com/artifact/com.h2database/h2 पर डाउनलोड किया जा सकता है।

सर्वर को @Before के माध्यम से स्नोवेली के उत्तर में परीक्षण फ़ाइल में शुरू किया जा सकता है, लेकिन केवल बाद में स्थापित डेटाबेस में कनेक्शन के मामले में, जो एक समस्या हो सकती है।