yay önyükleme varsayılan H2 jdbc bağlantısı (ve H2 konsolu)


108

Ben sadece uygulamamda herhangi bir şey belirtmediğimde ve mvn spring: run ile başladığımda spring-boot'un oluşturduğu gömülü bir H2 veritabanı için H2 veritabanı içeriğini görmeye çalışıyorum. Tabloları oluştururken JPA hazırda bekletildiğini görebiliyorum, ancak aşağıdaki URL'deki h2 konsoluna erişmeye çalışırsam veritabanında tablo yok.

http://localhost:8080/console/

Bunun gibi öneriler görüyorum: Spring tarafından başlatılan gömülü H2 veri tabanının içeriğini görüntüleyin

Ancak önerilen XML'yi ilkbahar önyüklemesinde nereye koyacağımı bilmiyorum ve yapmış olsam bile, harici bir veritabanı yapılandırıldığında h2console'un artık kullanılabilir olmasını istemiyorum, bu yüzden bunu halletmem daha olası. bir tür koşullu kodla (veya belki de yalnızca bir maven profili etkinleştirildiğinde yalnızca H2'yi dahil ettiğim en ideal durumda yayın otomatik olarak işlemesine izin verin).

H2 konsolunun önyüklemede nasıl çalıştırılacağını (ve ayrıca yayın kullandığı jdbc bağlantı dizesinin ne olduğunu bulmanın yolunu) gösteren bazı örnek kodlar var mı?


Bunu application.properties: spring.datasource.url = jdbc: h2: mem: AZ; DB_CLOSE_DELAY = -1; DB_CLOSE_ON_EXIT = FALSE spring.datasource.driverClassName = org.h2.Driver yayına ekleyerek kendi sorumu kısmen yanıtlayabilirim .datasource.username = sa spring.datasource.password = Ama asıl bilmek istediğim, yapılandırmanın programlı olarak nasıl yönetileceği (veya en azından bahar varsayılanlarını nasıl bulacağım)
Aaron Zeckoski


1
geoand - Bu, asıl soruda ilişkilendirdiğim şeyin aynısı, bu yüzden korkarım bu yardımcı olmuyor.
Aaron Zeckoski

2
Dave - Bu yapılandırmayı ekleyerek H2 konsoluna erişebiliyorum ve tabloları görebiliyorum, ancak bunu yapmanın doğru yolu olup olmadığını anlamama yardımcı olmuyor. ayarları) veya JDBC bağlantı yayı nasıl elde edilir.
Aaron Zeckoski

1
JDBC URL'sini kullanın: jdbc: h2: mem: testdb
Chinmoy

Yanıtlar:


111

H2 konsolunu H2 ile yaylı önyüklemede bu şekilde çalıştırdım. Bunun doğru olup olmadığından emin değilim ama başka hiç kimse bir çözüm önermediğine göre, bunu yapmanın en iyi yolu olduğunu önereceğim.

Benim durumumda, H2 konsolunu başlatırken girmem gereken bir şey olması için veritabanı için belirli bir ad seçtim (bu durumda, "AZ"). Spring.jpa.database-platformunu dışarıda bırakmak hiçbir şeye zarar vermez gibi görünse de, bunların hepsinin gerekli olduğunu düşünüyorum.

Application.properties içinde:

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'da (veya bazı konfigürasyonlarda):

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

Ardından, H2 konsoluna {server} / console / adresinden erişebilirsiniz. Bunu JDBC URL'si olarak girin: jdbc: h2: mem: AZ


1
Kullanılması new WebServlet()bana sorunlarını ver. Bu sizin için hangi sınıfı ithal ediyor? Benim için tek seçenek olarak javax.servlet.annotation.WebServlet'i çekiyor ve bu sadece bir arayüz.
Splaktar

5
Ah anladım, gerekli olan org.h2.server.web.WebServlet. Projem, yeni h2 kitaplıklarını almak için Gradle ile uyumlu değildi.
Splaktar

21
Application.properties parçalarına gerek yoktur. Sadece koyduğunuz Application.java bölümünü kullanabilir, ardından jdbc:h2:mem:testdbboş bir kullanıcı adı ve boş bir parola ile bağlanabilirsiniz . localhost: 8082 bu kurulumla çalışır.
Splaktar

2
@Splaktar Teşekkürler! Nasıl bağlanacağımı anlamaya çalışırken çıldırıyordum ve bulmacanın eksik parçası veritabanı adı için "testdb" kullanmaktı.
nerdherd

1
@Splaktar - yorumunuzu cevap haline getirmelisiniz. Söylediğiniz gibi, EmbeddedDatabaseConnection için kaynak kodu tüm varsayılan Gömülü DB Bağlantı URI'larını gösteriyor
karthik m

55

Spring Boot'dan itibaren 1.3.0.M3, H2 konsolu otomatik olarak yapılandırılabilir.

Ön koşullar şunlardır:

  • Bir web uygulaması geliştiriyorsunuz
  • Spring Boot Geliştirme Araçları etkinleştirildi
  • H2 sınıf yolunda

Spring Boot Dev Tools kullanmasanız bile, konsolu otomatik olarak yapılandırabilirsiniz spring.h2.console.enabled.true

Check out bu tüm ayrıntılar için belgelerin bir kısmını.

Bu şekilde yapılandırırken konsola şu adresten erişilebileceğini unutmayın: http: // localhost: 8080 / h2-console /


Veya dokümanda açıklandığı gibi, spring.h2.console.enabled = true ile etkinleştirirsiniz. Ön koşullarla, otomatik olarak etkinleştirilir.
keiki

Ne gelmez Sen bir web uygulaması geliştiren tam olarak ortalama?
garci560

Spring Boot bağlamında, spring-boot-starter-webbağımlılık olarak eklediğiniz anlamına gelir
geoand

1
Ayrıca localhost: 8080 / h2-console açtığınızda tablolarınızı görmek için jdbc url'ye jdbc: h2: mem: testdb yazmanız gerektiğini düşünüyorum. Ve url localhost: 8080 / h2-console'da localhost'tan sonra uygulama portunu belirtmeniz gerekir.
anujprashar

3
@anujprashar jdbc:h2:mem:testdbKonsolun erişilebilir olduğu URL için değil, bağlantı URL'si için oldukça eminim
geoand

44

Bu konu hakkında güzel bir öğretici buldum:

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

Temelde benim için doğru JDBC URL'si şuydu: jdbc:h2:mem:testdb


1
aptalca bir soru ancak bu varsayılan JDBC URL'si gibi görünüyor çünkü spring.datasource.name ayarı varsayılan olarak testdb'dir. Eğer db adını foodb gibi bir şeye değiştirirsem durum buysa neden jdbc hala aynı ve jdbc: h2: mem: foodb
Dan Vega

2
Bu jdbc url jdbc: h2: mem: testdb doğrudur. Sonunda bahar verileri jpa tarafından oluşturulan varsayılan veritabanına bağlanmama yardımcı oldu.
Kamal Joshi

Db adını aşağıdaki gibi ayarlayabilirsiniz: spring.datasource.url = jdbc: h2: mem: test; in application.properties
Aleksei Maide

23

Gönderen http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

H2 Web Konsolu (H2ConsoleProperties):

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

Yukarıdaki iki satırı application.properties dosyama eklemek, H2 veritabanı web konsoluna varsayılan kullanıcı adını (sa) ve şifreyi (boş, ui sizi sorduğunda olduğu gibi parola girmeyin) kullanarak erişmek için yeterliydi.


1
Olmamalı mı spring.h2.console.enabled=true? False onu devre dışı bırakır. Ve spring.h2.console.path=/h2-consolegereksizdir çünkü /h2-consoleSpring Boot'un varsayılan yolu budur. Belgelere göre "Varsayılan olarak konsol / h2-console'da bulunacaktır. Spring.h2.console.path özelliğini kullanarak konsolun yolunu özelleştirebilirsiniz." Daha fazla ayrıntı burada docs.spring.io/spring-boot/docs/current/reference/html/…
georger

OP'nin konsola nereden erişebileceğini göstermek için ikinci özelliği ekledim. Açıkçası spring.h2.console.enabled.enabled = false konsolu devre dışı bırakacaktır, önemli olan nokta bunun bir özellik olarak yapılandırılabilir olmasıdır. Netlik için bu özelliği doğru olarak ayarlayacağım.
mancini0

20

Adım Adım kılavuzla benzer bir cevap.

  1. Ekle Geliştirici araçları bağımlılık için sizin pom.xmlveyabuild.gradle

Uzman

<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'ye şuradan erişin http://localhost:8080/h2-console/
  2. jdbc:h2:mem:testdbJDBC URL'si olarak belirtin
  3. Projenizde belirttiğiniz varlığı tablo olarak görmelisiniz.

2
bunu bağımlılık bölümüne eklemek benim için çalıştı 'çalışma zamanı ("com.h2database: h2")'
Raja Nagendra Kumar

17

/Resources/application.properties dosyasında yalnızca aşağıdaki özelliklere sahiptim. Spring boot'u çalıştırdıktan sonra, bu URL'yi kullanarak ( http: // localhost: 8080 / h2-console / ), H2 konsolundaki tablo görünür hale geldi ve tablo verilerini görüntülemek için okundu, ayrıca basit SQL komutlarını da çalıştırabilirsiniz. Bir şey, java kodunuzda, veri alırken, schema.sql küçük harfli isimler kullanıyor olsa bile, sütun adları büyük harftir :)

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

İçin Bahar Boot 2.1.1 Bahar Initialzr gelen düz:

  1. Devtools ile varsayılan : http://127.0.0.1:8080/h2-console/

    • POM: spring-boot-starter, h2, spring-boot-starter-web, spring-boot-devtools
  2. Devtools olmadan - özelliklerde ayarlamanız gerekir:spring.h2.console.enabled=true spring.h2.console.path=/h2-console

    • POM: yaylı başlatıcı, h2, yaylı önyükleme başlatıcı web

Oraya vardığınızda - JDBC URL'sini ayarlayın: jdbc: h2: mem: testdb (Varsayılan olan çalışmayacaktır)


10

Spring Boot'un geliştirici araçlarını kullanırsanız, varsayılan olarak H2 Konsolu etkinleştirilmiş olarak gelir. /h2-console/ Adresinden erişilebilir . Giriş arayüzünde, giriş JDBC URLkullanım değeri için jdbc:h2:mem:testdb. İplere dikkat edin mem.

Spring Boot'un geliştirici araçlarını application.propertieskullanmıyorsanız , konsolu kullanırken etkinleştirebilirsiniz spring.h2.console.enabled=true. Bu, altında konsolu etkinleştirecektir /h2-console. URL'yi değiştirmek isterseniz, ile başka bir giriş ekleyebilirsiniz spring.h2.console.path=my_console_path.

Varsayılan şema adı testdb.

Spring Boot Belgelerinde daha fazla ayrıntı .


4
Neden jdbc:h2:mem:testdbvarsayılan jdbc url'si olarak ayarlanmadı? Jpa varlıklarımın nerede yanlış gittiğini düşünerek çok zaman harcadım
Sudip Bhandari

10

Yay uygulamasını kontrol edin. Özellikleri

spring.datasource.url = jdbc: h2: mem: testdb; DB_CLOSE_DELAY = -1; DB_CLOSE_ON_EXIT = YANLIŞ

burada testdb veritabanı tanımlıdır Başka bir şekilde bağlanırken h2 konsolunun aynı değere sahip olduğundan emin olun, varsayılan db'ye bağlanacaktır

görüntü açıklamasını buraya girin


1
kusursuz cevap!
Gaurav

6

Tabloları almak için tek yapmanız gereken 2 sql dosyası schema.sql (tablo oluşturmak için) ve data.sql (oluşturulan tablolar için veriler) oluşturmaktır. Bu dosyalar src / main / resources klasörüne konulacaktır. Spring boot otomatik olarak onları algılar ve çalışma süresi boyunca gerisini halleder.

Projenizde 2'den fazla DB kullanıyorsanız, (schema-h2.sql - h2 DB için, schema-oracle.sql - oracle DB için) gibi belirli dosyaları kullandığınızdan emin olun. Aynı veri.sql için de izlenmelidir.

Ayrıca schema.sql dosyanıza ilk ifade olarak drop table deyimi ekleyerek tabloları bıraktığınızdan emin olun. Yinelenen kayıtların eklenmesini önlemek için.

Yaylı önyükleme bağlantısı burada.

Application.properties aşağıdaki gibidir.

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

Aşağıdaki bağlantıdaki adımları takip edebilirsiniz.

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


"spring.jpa.hibernate.ddl-auto" iki kez farklı değerlerle ...
Yura

3

Spring boot 2.0.2.RELEASE ile POM dosyasında spring-boot-starter-data-jpa ve com.h2database yapılandırmanın sadece H2 konsolunun çalışması için yeterli olmadığını buldum. Spring-boot-devtools'u aşağıdaki gibi yapılandırmalısınız. İsteğe bağlı olarak bu yazıda Aaron Zeckoski'nin talimatını takip edebilirsiniz.

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

3

H2 konsolunda oturum açarken yolunuz olarak jdbc: h2: mem: testdb kullanın.

Açıkçası, Spring Boot özelliklerini değiştirdiyseniz, veri kaynağınız farklı olabilir, ancak varsayılanı nasıl bulacağınızla uğraşıyorsunuz gibi görünüyor. Hepsi bu kadar! H2'de oturum açtıktan sonra şemanızı göreceksiniz.


1

Aynı problemi yaşarken çok aptalca bir hata yapmıştım. Ben birim test durumları çalışan ve dolayısıyla ben batmıştı için H2 DB ekledi vardı scopeiçin testde pom.xml. Uygulamayı kullanarak çalıştırırken mvn spring:runkaldırdım scopeve şimdi iyi çalışıyor.


1

Spring Boot 2.3.3 için. Doğrudan Spring Initialzr'dan YAYIN:

POM: veriler jpa, h2, web

uygulama özellikleri: spring.h2.console.enabled=true

Uygulamayı çalıştırdığınızda, çalıştırma konsolunda aşağıdaki gibi satırı arayın:

2020-08-18 21:12:32.664  INFO 63256 --- [           main] o.s.b.a.h2.H2ConsoleAutoConfiguration    : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:eaa9d6da-aa2e-4ad3-9e5b-2b60eb2fcbc5'

Şimdi h2 konsolu için yukarıdaki JDBC URL'sini kullanın ve tıklayın Connect.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.