स्प्रिंग बूट डिफ़ॉल्ट H2 jdbc कनेक्शन (और H2 कंसोल)


107

मैं बस एक एम्बेडेड H2 डेटाबेस के लिए H2 डेटाबेस सामग्री को देखने की कोशिश कर रहा हूं, जो कि स्प्रिंग-बूट तब बनाता है जब मैं अपने एप्लिकेशन में कुछ भी निर्दिष्ट नहीं करता हूं। समर्थक और mvan वसंत के साथ शुरू करते हैं: रन। मैं हाइबरनेट JPA तालिकाओं को बनाते हुए देख सकता हूं, लेकिन अगर मैं URL पर h2 कंसोल तक पहुंचने का प्रयास करता हूं, तो डेटाबेस में कोई तालिका नहीं है।

http://localhost:8080/console/

मैं इस तरह के सुझाव देखता हूं: स्प्रिंग द्वारा शुरू किए गए एम्बेडेड H2 डेटाबेस की सामग्री देखें

लेकिन मुझे नहीं पता कि सुझाए गए XML को स्प्रिंग-बूट में कहां रखा जाए और अगर मैंने किया भी, तो मैं नहीं चाहता कि h2console अब उपलब्ध हो जब कोई बाहरी डेटाबेस कॉन्फ़िगर किया गया हो, तो यह अधिक संभावना है कि मुझे इसे संभालने की आवश्यकता है कुछ प्रकार के सशर्त कोड के साथ (या शायद बस वसंत को स्वचालित रूप से इसे सबसे आदर्श मामले में संभालने की अनुमति देता है जहां मैं केवल H2 को शामिल करता हूं जब एक मावेन प्रोफाइल सक्रिय होता है)।

क्या किसी को कुछ नमूना कोड दिखा रहा है कि बूट में काम करने वाला H2 कंसोल कैसे प्राप्त करें (और यह भी पता लगाने का तरीका क्या है कि jdbc कनेक्शन स्ट्रिंग जो वसंत का उपयोग कर रहा है)?


मैं आंशिक रूप से अपने आवेदन में इसे जोड़कर अपने स्वयं के प्रश्न का उत्तर दे सकता हूं। समर्थक: spring.datasource.url = jdbc: h2: mem: AZ; DB_CLOSE_DELAY = -1; DB_CLOSE_ON_EXIT = FALSE spring.datasource.driverClassName = org.h2.D .datourceource.username = sa spring.datasource.password = लेकिन जो मैं वास्तव में जानना चाहता हूं वह यह है कि कॉन्फ़िगरेशन को प्रोग्रामेटिक रूप से कैसे प्रबंधित किया जाए (या कम से कम स्प्रिंग डिफॉल्ट का पता कैसे लगाया जाए)
हारून ज़ेकोसेज़


1
जियोन्ड - यह वही चीज है जिसे मैंने वास्तविक प्रश्न में जोड़ा है इसलिए मुझे डर है कि यह उपयोगी नहीं है।
एरॉन ज़ेकॉस्की

2
डेव - उस कॉन्फिग को जोड़कर मैं H2 कंसोल को एक्सेस करने में सक्षम हूं और टेबल्स को देख सकता हूं लेकिन यह मुझे यह समझने में मदद नहीं करता है कि क्या यह करने का सही तरीका है (मैं वसंत द्वारा एक सेटअप का उपयोग करना पसंद करूंगा जब मेरे पास कोई नहीं होगा सेटिंग्स) या कैसे JDBC कनेक्शन वसंत का उपयोग किया जाता है।
एरोन ज़ेकॉस्की

1
JDBC URL का उपयोग करें: jdbc: h2: mem: testdb
चिन्मय

जवाबों:


110

इस तरह से मुझे H2 के साथ स्प्रिंग-बूट में काम करने वाला H2 कंसोल मिला। मुझे यकीन नहीं है कि यह सही है, लेकिन चूंकि किसी और ने समाधान की पेशकश नहीं की है, तो मैं यह सुझाव देने जा रहा हूं कि यह करने का सबसे अच्छा तरीका है।

मेरे मामले में, मैंने डेटाबेस के लिए एक विशिष्ट नाम चुना ताकि एच 2 कंसोल (इस मामले में, "एज़") शुरू करते समय मुझे कुछ दर्ज करना पड़े। मुझे लगता है कि इन सभी की आवश्यकता होती है, हालांकि ऐसा लगता है कि वसंत को छोड़ देना चाहिए ।jpa.database-platform कुछ भी चोट नहीं पहुंचाता है।

अनुप्रयोग में

spring.datasource.url=jdbc:h2:mem:AZ;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

Application.java (या कुछ कॉन्फ़िगरेशन) में:

@Bean
public ServletRegistrationBean h2servletRegistration() {
    ServletRegistrationBean registration = new ServletRegistrationBean(new WebServlet());
    registration.addUrlMappings("/console/*");
    return registration;
}

तब आप {सर्वर} / कंसोल / पर H2 कंसोल का उपयोग कर सकते हैं। इसे JDBC URL: jdbc: h2: mem: AZ के रूप में दर्ज करें


1
new WebServlet()मुझे मुद्दों का उपयोग करना । यह कौन सा वर्ग आपके लिए आयात कर रहा है? यह केवल विकल्प के रूप में मेरे लिए javax.servlet.annotation.WebServlet में खींच रहा है और यह सिर्फ एक इंटरफ़ेस है।
Splaktar

5
ओह, मैं समझ गया। org.h2.server.web.WebServlet वह है जिसकी आवश्यकता है। मेरा प्रोजेक्ट ग्रेड के साथ नए h2 पुस्तकालयों में खींचने के लिए सिंक में नहीं था।
Splaktar

21
Application.properties टुकड़े की जरूरत नहीं है। आप बस आपके द्वारा लगाए गए Application.java भाग का उपयोग कर सकते हैं, फिर jdbc:h2:mem:testdbएक रिक्त उपयोगकर्ता नाम और रिक्त पासवर्ड से जुड़ सकते हैं। लोकलहोस्ट: 8082 इस सेटअप के साथ काम करता है।
Splaktar

2
@Splaktar धन्यवाद! मैं पागल हो रहा था कि कैसे कनेक्ट करने की कोशिश कर रहा था और पहेली का लापता टुकड़ा डेटाबेस के नाम के लिए "टेस्टडब" का उपयोग करना था।
nerdherd

1
@Splaktar - आपको अपनी टिप्पणी का उत्तर देना चाहिए। जैसा आप के लिए स्रोत कोड कहा EmbeddedDatabaseConnection शो सभी डिफ़ॉल्ट एंबेडेड DB कनेक्शन यूआरआई
कार्तिक मीटर

55

स्प्रिंग बूट के रूप में 1.3.0.M3, H2 कंसोल ऑटो-कॉन्फ़िगर किया जा सकता है।

आवश्यक शर्तें हैं:

  • आप एक वेब ऐप विकसित कर रहे हैं
  • स्प्रिंग बूट देव उपकरण सक्षम हैं
  • एच 2 क्लासपाथ पर है

यहां तक ​​कि अगर आप स्प्रिंग बूट देव टूल्स का उपयोग नहीं करते हैं, तब भी आप कंसोल को सेटिंग spring.h2.console.enabledपर ऑटो-कॉन्फ़िगर कर सकते हैंtrue

की जाँच करें इस सभी विवरण के लिए दस्तावेज़ का हिस्सा है।

ध्यान दें कि इस तरह से कॉन्फ़िगर करते समय कंसोल पर पहुंच योग्य है: http: // localhost: 8080 / h2-कंसोल /


या जैसा कि डॉक्स में बताया गया है कि आप इसे स्प्रिंग.एच 2.कॉन कंसोल। सक्षम / सत्य के साथ सक्षम करते हैं। किसी और चीज के साथ यह स्वचालित रूप से सक्षम है।
कीकी

क्या आप वास्तव में एक वेब ऐप विकसित कर रहे हैं ?
garci560

स्प्रिंग बूट के संदर्भ में, इसका मतलब है कि आपने spring-boot-starter-webएक निर्भरता के रूप में जोड़ा है
जियोन्ड

1
इसके अलावा, मुझे लगता है कि जब आप लोकलहोस्ट खोलते हैं : 8080 / h2- कंसोल आपको jdbc: h2: mem: testdb को jdbc url में अपनी टेबल देखने के लिए लिखना होगा। और url लोकलहोस्ट में: लोकलहोस्ट के बाद 8080 / h2-कंसोल आपको एप्लिकेशन का पोर्ट निर्दिष्ट करने की आवश्यकता है।
अनुजप्रशार १har ’१har

3
@anujprashar मुझे पूरा यकीन jdbc:h2:mem:testdbहै कि कनेक्शन URL के लिए है, न कि URL के लिए कंसोल सुलभ है
geoand

44

मुझे इस विषय के बारे में एक अच्छा ट्यूटोरियल मिला है:

https://springframework.guru/using-the-h2-database-console-in-spring-boot-with-spring-security/

मूल रूप से मेरे लिए JDBC URL सही था: jdbc:h2:mem:testdb


1
गूंगा प्रश्न लेकिन यह डिफ़ॉल्ट JDBC URL लगता है क्योंकि सेटिंग spring.datasource.name testdb में चूक करता है। अगर मैं db नाम को खाने की चीज़ की तरह बदल देता हूँ तो jdbc अभी भी वही है और jdbc: h2: mem: foodb
Dan Vega

2
यह jdbc url jdbc: h2: mem: testdb सही है। इसने मुझे आखिरकार स्प्रिंग डेटा जपा द्वारा बनाए गए डिफ़ॉल्ट डेटाबेस से जुड़ने में मदद की।
कमल जोशी

आप db नाम को कुछ भी सेट कर सकते हैं जैसे: spring.datasource.url = jdbc: h2: mem: test; application.properties में
अलेक्सेई Maide

23

से http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

H2 वेब कंसोल (H2ConsoleProperties):

spring.h2.console.enabled=true //Enable the console.
spring.h2.console.path=/h2-console //Path at which the console will be available.

उपरोक्त दो पंक्तियों को मेरे अनुप्रयोग में जोड़ने से। फ़ाइल फ़ाइल H2 डेटाबेस वेब कंसोल तक पहुँचने के लिए पर्याप्त थी, डिफ़ॉल्ट यूज़रनेम (sa) और पासवर्ड का उपयोग करके (खाली, जैसा कि जब कोई पासवर्ड आपको संकेत देता है तो पासवर्ड दर्ज न करें)।


1
नहीं होना चाहिए spring.h2.console.enabled=true? मिथ्या इसे निष्क्रिय कर देगा। और spring.h2.console.path=/h2-consoleबेमानी है क्योंकि /h2-consoleस्प्रिंग बूट से डिफ़ॉल्ट पथ है। प्रलेखन के अनुसार "डिफ़ॉल्ट रूप से कंसोल / h2-कंसोल पर उपलब्ध होगा। आप स्प्रिंग.h2.console.path संपत्ति का उपयोग करके कंसोल के पथ को अनुकूलित कर सकते हैं।" अधिक विवरण यहाँ docs.spring.io/spring-boot/docs/current/reference/html/…
georger

मैंने ओपी को दिखाने के लिए बाद की संपत्ति को शामिल किया जहां वह कंसोल तक पहुंच सकता है। जाहिर है कि स्प्रिंग। H2.console.enabled.enabled = false कंसोल को अक्षम कर देगा, बिंदु यह है कि यह एक संपत्ति के रूप में कॉन्फ़िगर करने योग्य है। मैं स्पष्टता के लिए उस संपत्ति को सही पर सेट करूँगा।
mancini0

20

स्टेप बाय स्टेप गाइड के साथ एक समान उत्तर।

  1. अपने या के लिए डेवलपर उपकरण निर्भरता जोड़ेंpom.xmlbuild.gradle

Maven

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

Gradle

dependencies {
    compile("org.springframework.boot:spring-boot-devtools")
}
  1. से db एक्सेस करें http://localhost:8080/h2-console/
  2. jdbc:h2:mem:testdbJDBC URL के रूप में निर्दिष्ट करें
  3. आपको अपनी परियोजना में निर्दिष्ट इकाई को एक तालिका के रूप में देखना चाहिए।

2
निर्भरता खंड में इसे जोड़ने से मेरे लिए 'रनटाइम ("com.h2database: h2") काम हुआ
राजा नागेंद्र कुमार

17

मेरे पास /resource/application.properties में केवल नीचे की संपत्तियां थीं। स्प्रिंग बूट चलाने के बाद, इस URL ( http: // localhost: 8080 / h2-कंसोल / ) का उपयोग करते हुए, H2 कंसोल में तालिका दिखाई दे रही थी और तालिका डेटा को देखने के लिए पढ़ा गया था, आप साधारण SQL कमांड भी चला सकते हैं। एक बात, आपके जावा कोड में, डेटा लाते समय, कॉलम नाम ऊपरी-केस होते हैं, भले ही स्कीमा.sql लोअर-केस नामों का उपयोग कर रहा हो :)

spring.datasource.initialize=true
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=- 1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true

16

के लिए स्प्रिंग बूट 2.1.1 स्प्रिंग Initialzr से सीधे:

  1. साथ डिफ़ॉल्ट DevTools है http://127.0.0.1:8080/h2-console/

    • पोम: स्प्रिंग-बूट-स्टार्टर, एच 2, स्प्रिंग-बूट-स्टार्टर-वेब, स्प्रिंग-बूट-डेविटल्स
  2. भक्तों के बिना - आपको इसे गुणों में सेट करने की आवश्यकता है:spring.h2.console.enabled=true spring.h2.console.path=/h2-console

    • पोम: स्प्रिंग-बूट-स्टार्टर, एच 2, स्प्रिंग-बूट-स्टार्टर-वेब

एक बार जब आप वहाँ पहुँच जाते हैं - JDBC URL सेट करें: jdbc: h2: mem: testdb (डिफ़ॉल्ट रूप से काम नहीं करेगा)


10

यदि आप स्प्रिंग बूट के डेवलपर टूल का उपयोग करते हैं, तो यह डिफ़ॉल्ट रूप से सक्षम H2 कंसोल के साथ आता है। इसे /h2-console/ से एक्सेस किया जा सकता है । इनपुट JDBC URLउपयोग मूल्य के लिए लॉगिन इंटरफ़ेस पर jdbc:h2:mem:testdbmemस्ट्रिंग पर ध्यान दें ।

आप वसंत बूट के डेवलपर उपकरण का उपयोग नहीं करते हैं, तो आप में सांत्वना सक्षम कर सकते हैं application.propertiesका उपयोग कर spring.h2.console.enabled=true। यह कंसोल को सक्षम करेगा /h2-console। यदि आप URL बदलना चाहते हैं तो आप के साथ एक और प्रविष्टि जोड़ सकते हैं spring.h2.console.path=my_console_path

डिफ़ॉल्ट स्कीमा नाम है testdb

स्प्रिंग बूट प्रलेखन में अधिक जानकारी ।


4
jdbc:h2:mem:testdbडिफ़ॉल्ट jdbc url के रूप में सेट क्यों नहीं किया जाता है? मैंने बहुत समय बिताया, जहाँ मेरे जाप संस्थाएँ गलत हो गईं
सुदीप भंडारी

10

वसंत आवेदन की जाँच करें

spring.datasource.url = JDBC: एच 2: मेम: testdb; DB_CLOSE_DELAY = -1; DB_CLOSE_ON_EXIT = FALSE

यहाँ testdb डेटाबेस परिभाषित किया गया है सुनिश्चित करें कि h2 कंसोल का समान मूल्य है जबकि अन्य वार को जोड़ने पर यह डिफ़ॉल्ट db से जुड़ जाएगा

यहां छवि विवरण दर्ज करें


1
निर्दोष उत्तर!
गौरव

6

तालिकाओं को प्राप्त करने के लिए आपको केवल 2 sql files स्कीमा.sql (टेबल निर्माण के लिए) और data.sql (निर्मित टेबल के लिए डेटा) बनाने की आवश्यकता है। इन फ़ाइलों को src / main / resource फ़ोल्डर में डाला जाना चाहिए। स्प्रिंग बूट ऑटो उन्हें पता लगाता है और रनटाइम के दौरान आराम का ख्याल रखता है।

यदि आपकी परियोजना में 2 DB से अधिक का उपयोग करने से विशिष्ट फ़ाइलों का उपयोग करना सुनिश्चित करें, जैसे (स्कीमा- h2.sql - h2 DB के लिए, स्कीमा- oracle.sql - oracle DB के लिए)। Data.sql के लिए भी इसका अनुसरण किया जाएगा।

यह भी सुनिश्चित करें कि आप अपने बयान में ड्रॉप टेबल स्टेटमेंट को जोड़कर पहले स्टेटमेंट के रूप में टेबल ड्रॉप करें। डुप्लिकेट रिकॉर्ड्स को जोड़ने से बचने के लिए।

वसंत बूट के लिए लिंक यहाँ है।

मेरा आवेदन.प्रदाय इस प्रकार है।

spring.datasource.url=jdbc:h2:~/file/Shiva;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.platform=h2
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
spring.datasource.initialize=true 
spring.error.whitelabel.enabled=true
spring.h2.console.path=/console
spring.datasource.continue-on-error=true
spring.jpa.hibernate.ddl-auto=create
spring.hibernate.hbm2ddl.auto=update
spring.hibernate.show_sql=true

आप नीचे दिए गए लिंक में चरणों का पालन कर सकते हैं।

https://springframework.guru/using-the-h2-database-console-in-spring-boot-with-spring-security/


"स्प्रिंग.जपा.हिबरनेट.डीडब्लू-ऑटो" दो बार विभिन्न मूल्यों के साथ ...
यूरा

3

मैंने पाया कि स्प्रिंग बूट 2.0.2 के साथ। कृपया, POM फ़ाइल में स्प्रिंग-बूट-स्टार्टर-डेटा-जपा और com.h2database को कॉन्फ़िगर करना केवल H2 कंसोल के काम करने के लिए पर्याप्त नहीं है। आपको नीचे दिए अनुसार स्प्रिंग-बूट-डेवटूल को कॉन्फ़िगर करना होगा। वैकल्पिक रूप से आप इस पोस्ट में हारून ज़ेकोस्की के निर्देश का पालन कर सकते हैं

  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
 </dependency>

3

जब आप H2 कंसोल में लॉग इन करते हैं, तो jdbc: h2: mem: testdb को अपने पथ के रूप में उपयोग करें।

जाहिर है अगर आपने स्प्रिंग बूट गुणों को बदल दिया है तो आपका डेटा स्रोत अलग हो सकता है, लेकिन ऐसा लगता है कि आप डिफ़ॉल्ट को खोजने के लिए संघर्ष कर रहे हैं। यही सब है इसके लिए! H2 में लॉग इन करने के बाद आपको अपना स्कीमा दिखाई देगा।


1

मैंने एक ही बेवकूफ गलती की थी जब मुझे यही समस्या थी। मैं इकाई परीक्षण मामलों चल रहा है और इसलिए मैं स्थापित किया था के लिए एच 2 डीबी जोड़ा था scopeकरने testमें pom.xml। आवेदन का उपयोग करते हुए mvn spring:runमैंने हटा दिया scopeऔर यह अब ठीक काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.