khởi động mùa xuân kết nối H2 jdbc mặc định (và bảng điều khiển H2)


107

Tôi chỉ đang cố gắng xem nội dung cơ sở dữ liệu H2 cho cơ sở dữ liệu H2 nhúng mà spring-boot tạo ra khi tôi không chỉ định bất kỳ thứ gì trong application.properties của mình và bắt đầu với mvn spring: run. Tôi có thể thấy JPA ngủ đông đang tạo các bảng nhưng nếu tôi cố gắng truy cập bảng điều khiển h2 tại URL bên dưới thì cơ sở dữ liệu không có bảng nào.

http://localhost:8080/console/

Tôi thấy các đề xuất như thế này: Xem nội dung của cơ sở dữ liệu H2 được nhúng bắt đầu bởi Spring

Nhưng tôi không biết phải đặt XML được đề xuất ở đâu trong spring-boot và ngay cả khi tôi đã làm vậy, tôi không muốn h2console khả dụng nữa khi cơ sở dữ liệu bên ngoài được định cấu hình nên có nhiều khả năng tôi cần xử lý điều này. với một số loại mã điều kiện (hoặc có thể chỉ cho phép mùa xuân tự động xử lý nó trong trường hợp lý tưởng nhất mà tôi chỉ bao gồm H2 khi cấu hình maven được kích hoạt).

Có ai có một số mã mẫu chỉ ra cách làm cho bảng điều khiển H2 hoạt động khi khởi động (và cũng là cách để tìm ra chuỗi kết nối jdbc mà mùa xuân đang sử dụng) không?


Tôi có thể trả lời một phần câu hỏi của mình bằng cách thêm câu hỏi này vào application.properties: 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 = Nhưng những gì tôi thực sự muốn biết là làm thế nào để quản lý cấu hình lập trình (hoặc ít nhất là làm thế nào để tìm ra giá trị mặc định mùa xuân)
Aaron Zeckoski


1
geoand - Đó cũng là điều tôi đã liên kết trong câu hỏi thực tế nên tôi e rằng điều đó không hữu ích.
Aaron Zeckoski

2
Dave - Bằng cách thêm cấu hình đó, tôi có thể truy cập bảng điều khiển H2 và xem các bảng nhưng nó không giúp tôi hiểu liệu đó có phải là cách thích hợp để thực hiện hay không (tôi muốn truy cập vào một thiết lập vào mùa xuân khi tôi không có cài đặt) hoặc cách lấy lò xo kết nối JDBC đang sử dụng.
Aaron Zeckoski

1
Sử dụng URL JDBC: jdbc: h2: mem: testdb
Chinmoy

Câu trả lời:


110

Đây là cách tôi có bảng điều khiển H2 hoạt động trong khởi động mùa xuân với H2. Tôi không chắc liệu điều này có đúng hay không nhưng vì không có ai khác đưa ra giải pháp nên tôi sẽ đề xuất đây là cách tốt nhất để làm điều đó.

Trong trường hợp của tôi, tôi đã chọn một tên cụ thể cho cơ sở dữ liệu để tôi có thứ gì đó để nhập khi khởi động bảng điều khiển H2 (trong trường hợp này là "AZ"). Tôi nghĩ rằng tất cả những điều này là bắt buộc mặc dù có vẻ như việc loại bỏ nền tảng spring.jpa.database-không gây hại gì.

Trong ứng dụng.properties:

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

Trong Application.java (hoặc một số cấu hình):

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

Sau đó, bạn có thể truy cập bảng điều khiển H2 tại {server} / console /. Nhập cái này làm URL JDBC: jdbc: h2: mem: AZ


1
Sử dụng new WebServlet()cho tôi vấn đề. Lớp này đang nhập cho bạn? Nó kéo javax.servlet.annotation.WebServlet đối với tôi như là lựa chọn duy nhất và nó chỉ là một giao diện.
Splaktar

5
Ồ, tôi hiểu rồi, org.h2.server.web.WebServlet là cái cần thiết. Dự án của tôi không đồng bộ với Gradle để lấy các thư viện h2 mới.
Splaktar

21
Các mảnh application.properties không cần thiết. Bạn chỉ có thể sử dụng phần Application.java mà bạn đặt, sau đó kết nối jdbc:h2:mem:testdbvới tên người dùng trống và mật khẩu trống. localhost: 8082 hoạt động với thiết lập này.
Splaktar

2
@Splaktar Cảm ơn bạn! Tôi đã cố gắng tìm ra cách kết nối và phần còn thiếu của câu đố là sử dụng "testdb" cho tên cơ sở dữ liệu.
nerdherd

1
@Splaktar - bạn nên đưa ra câu trả lời nhận xét của mình. Như bạn nói mã nguồn cho EmbeddedDatabaseConnection chương trình tất cả các mặc định nhúng DB URI kết nối
Karthik m

55

Kể từ Spring Boot 1.3.0.M3, bảng điều khiển H2 có thể được cấu hình tự động.

Các điều kiện tiên quyết là:

  • Bạn đang phát triển một ứng dụng web
  • Spring Boot Dev Tools đã được bật
  • H2 nằm trên classpath

Ngay cả khi bạn không sử dụng Spring Boot Dev Tools, bạn vẫn có thể tự động định cấu hình bảng điều khiển bằng cách đặt spring.h2.console.enabledthànhtrue

Kiểm tra phần này của tài liệu để biết tất cả các chi tiết.

Lưu ý rằng khi cấu hình theo cách này, bảng điều khiển có thể truy cập tại: http: // localhost: 8080 / h2-console /


Hoặc như được giải thích trong tài liệu, bạn bật nó với spring.h2.console.enabled = true. Với các điều kiện tiên quyết, nó sẽ tự động được kích hoạt.
keiki,

Bạn đang phát triển một ứng dụng web chính xác nghĩa là gì?
garci560

Trong ngữ cảnh của Spring Boot, điều đó có nghĩa là bạn đã thêm vào spring-boot-starter-webdưới dạng phụ thuộc
địa lý và

1
Ngoài ra, tôi nghĩ rằng khi bạn mở localhost: 8080 / h2-console, bạn cần viết jdbc: h2: mem: testdb trong url jdbc để xem các bảng của bạn. Và trong url localhost: 8080 / h2-console sau localhost, bạn cần chỉ định cổng ứng dụng.
anujprashar

3
@anujprashar Tôi khá chắc chắn jdbc:h2:mem:testdblà cho URL kết nối, không phải cho URL là bảng điều khiển có thể truy cập được
geoand

44

Tôi đã tìm thấy một hướng dẫn hay về chủ đề này:

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

Về cơ bản, URL JDBC chính xác cho tôi là: jdbc:h2:mem:testdb


1
câu hỏi ngu ngốc nhưng đây dường như là URL JDBC mặc định vì cài đặt spring.datasource.name mặc định thành testdb. Tại sao nếu thats trường hợp nếu tôi thay đổi tên db để cái gì đó như foodb là jdbc vẫn giống nhau và không jdbc: h2: mem: foodb
Dan Vega

2
Url jdbc này jdbc: h2: mem: testdb là đúng. Cuối cùng nó đã giúp tôi kết nối với cơ sở dữ liệu mặc định được tạo bởi Spring data jpa.
Kamal Joshi

Bạn có thể đặt tên db như bất kỳ thứ gì như: spring.datasource.url = jdbc: h2: mem: test; trong application.properties
Aleksei Maide

23

Từ http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

Bảng điều khiển H2 Web (H2ConsoleProperties):

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

Thêm hai dòng trên vào tệp application.properties của tôi là đủ để truy cập bảng điều khiển web cơ sở dữ liệu H2, sử dụng tên người dùng và mật khẩu mặc định (sa) và mật khẩu (trống, vì không nhập mật khẩu khi ui nhắc bạn).


1
Không nên spring.h2.console.enabled=true? Sai sẽ vô hiệu hóa nó. Và spring.h2.console.path=/h2-consolelà thừa vì /h2-consolelà đường dẫn mặc định từ Spring Boot. Theo tài liệu "Theo mặc định, bảng điều khiển sẽ có sẵn tại / h2-console. Bạn có thể tùy chỉnh đường dẫn của bảng điều khiển bằng cách sử dụng thuộc tính spring.h2.console.path." Thông tin chi tiết tại đây docs.spring.io/spring-boot/docs/current/reference/html/…
georger

Tôi bao gồm thuộc tính sau để hiển thị OP nơi anh ta có thể truy cập bảng điều khiển. Rõ ràng spring.h2.console.enabled.enabled = false sẽ vô hiệu hóa giao diện điều khiển, vấn đề là đây có thể được định cấu hình như một thuộc tính. Tôi sẽ đặt thuộc tính đó thành true cho rõ ràng.
mancini0

20

Một câu trả lời tương tự với hướng dẫn Từng bước.

  1. Thêm phụ thuộc vào công cụ dành cho nhà phát triển vào pom.xmlhoặcbuild.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. Truy cập db từ http://localhost:8080/h2-console/
  2. Chỉ định jdbc:h2:mem:testdblàm URL JDBC
  3. Bạn sẽ thấy thực thể mà bạn đã chỉ định trong dự án của mình dưới dạng một bảng.

2
cách thêm này trong sự phụ thuộc phần làm việc cho tôi 'runtime ( "com.h2database: h2")'
Raja Nagendra Kumar

17

Tôi chỉ có các thuộc tính dưới đây trong /resources/application.properties. Sau khi chạy khởi động mùa xuân, sử dụng URL này ( http: // localhost: 8080 / h2-console / ), bảng trong bảng điều khiển H2 đã hiển thị và đọc để xem dữ liệu bảng, bạn cũng có thể chạy các lệnh SQL đơn giản. Một điều, trong mã java của bạn, trong khi tìm nạp dữ liệu, tên cột là chữ hoa, mặc dù schema.sql đang sử dụng tên chữ thường :)

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

Đối với Spring Boot 2.1.1 ngay từ Spring Initialzr:

  1. Mặc định với devtoolshttp://127.0.0.1:8080/h2-console/

    • POM: spring-boot-starter, h2, spring-boot-starter-web, spring-boot-devtools
  2. Không có devtools - bạn cần đặt nó trong các thuộc tính:spring.h2.console.enabled=true spring.h2.console.path=/h2-console

    • POM: spring-boot-starter, h2, spring-boot-starter-web

Khi bạn đến đó - đặt URL JDBC: jdbc: h2: mem: testdb (Cái mặc định sẽ không hoạt động)


10

Nếu bạn sử dụng các công cụ dành cho nhà phát triển của Spring Boot, nó đi kèm với Bảng điều khiển H2 được bật theo mặc định. Nó có thể được truy cập từ /h2-console/. Trên giao diện đăng nhập, nhập JDBC URLgiá trị sử dụng jdbc:h2:mem:testdb. Chú ý đến memchuỗi.

Nếu bạn không sử dụng các công cụ dành cho nhà phát triển của Spring Boot, bạn có thể bật bảng điều khiển application.propertiesbằng cách sử dụng spring.h2.console.enabled=true. Điều này sẽ bật bảng điều khiển dưới /h2-console. Nếu bạn muốn thay đổi URL thì bạn có thể thêm một mục nhập khác với spring.h2.console.path=my_console_path.

Tên lược đồ mặc định là testdb.

Thêm chi tiết trong Tài liệu Khởi động Mùa xuân .


4
Tại sao không jdbc:h2:mem:testdbđược đặt làm url jdbc mặc định? Tôi đã dành rất nhiều thời gian suy ngẫm nơi thực thể JPA tôi đã đi sai
Sudip Bhandari

10

Kiểm tra ứng dụng mùa xuân.properties

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

ở đây testdb là cơ sở dữ liệu được định nghĩa Đảm bảo bảng điều khiển h2 có cùng giá trị trong khi kết nối khác khôn ngoan, nó sẽ kết nối với db mặc định

nhập mô tả hình ảnh ở đây


1
câu trả lời hoàn hảo!
gaurav

6

Để có được bảng các bạn cần tạo 2 tệp sql là schema.sql (để tạo bảng) và data.sql (dữ liệu cho các bảng đã tạo). Các tệp này sẽ được đặt trong thư mục src / main / resources. Spring boot tự động phát hiện chúng và xử lý phần còn lại trong thời gian chạy.

Nếu bạn sử dụng nhiều hơn 2 DB trong dự án của mình, hãy đảm bảo sử dụng các tệp cụ thể như (schema-h2.sql - cho h2 DB, schema-oracle.sql - cho oracle DB). Tương tự đối với data.sql cũng vậy.

Đồng thời đảm bảo rằng bạn giảm bảng bằng cách thêm câu lệnh bảng thả trong schema.sql của bạn làm câu lệnh đầu tiên. Để tránh bổ sung các bản ghi trùng lặp.

Liên kết cho khởi động mùa xuân là ở đây.

Application.properties của tôi như sau.

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

Bạn có thể làm theo các bước trong liên kết dưới đây.

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


"spring.jpa.hibernate.ddl-auto" hai lần với các giá trị khác nhau ...
Yura

3

Tôi thấy rằng với spring boot 2.0.2.RELEASE, việc định cấu hình spring-boot-starter-data-jpa và com.h2database trong tệp POM không chỉ đủ để bảng điều khiển H2 hoạt động. Bạn phải cấu hình spring-boot-devtools như bên dưới. Hoặc bạn có thể làm theo hướng dẫn từ Aaron Zeckoski trong bài đăng này

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

3

Sử dụng jdbc: h2: mem: testdb làm đường dẫn của bạn khi đăng nhập vào bảng điều khiển H2.

Rõ ràng là nếu bạn đã thay đổi thuộc tính Spring Boot thì nguồn dữ liệu của bạn có thể khác, nhưng có vẻ như bạn đang vật lộn với cách tìm mặc định. Thats tất cả để có nó! Bạn sẽ thấy lược đồ của mình sau khi đăng nhập vào H2.


1

Tôi đã mắc phải một sai lầm rất ngu ngốc khi tôi gặp phải vấn đề tương tự. Tôi đã thêm H2 DB để chạy trường hợp đơn vị kiểm tra và vì thế tôi đã thiết lập scopeđể testpom.xml. Trong khi chạy ứng dụng bằng cách sử dụng, mvn spring:runtôi đã gỡ bỏ scopevà hiện nó hoạt động tốt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.