підключення весняного завантаження за замовчуванням H2 jdbc (і консоль H2)


107

Я просто намагаюся побачити вміст бази даних H2 для вбудованої бази даних H2, яку створює Spring-boot, коли я нічого не вказую у своїй програмі.perperties і починаю з mvn spring: run. Я можу бачити сплячий JPA, який створює таблиці, але якщо я спробую отримати доступ до консолі h2 за URL-адресою нижче, база даних не має таблиць.

http://localhost:8080/console/

Я бачу такі пропозиції: Перегляд вмісту вбудованої бази даних H2, розпочатої Spring

Але я не знаю, куди слід поставити запропонований XML у весняний завантажувач, і навіть якщо я це зробив, я не хочу, щоб h2console була доступна більше, коли налаштована зовнішня база даних, тому більш ймовірно, що мені потрібно це обробити з якимось умовним кодом (а може просто дозволити пружині автоматично обробляти її в найбільш ідеальному випадку, коли я включаю H2 лише тоді, коли активований профіль Maven).

У когось є зразок коду, який показує, як змусити консоль H2 працювати під час завантаження (а також спосіб дізнатися, що використовується рядок з'єднання jdbc, яку використовує весна)?


Я можу частково відповісти на власне запитання, додавши це до своєї програми 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 = Але я дійсно хочу знати, як програмно керувати конфігурацією (або, принаймні, як дізнатися параметри за замовчуванням весни)
Aaron Zeckoski

Перевірте це stackoverflow.com/a/19961575/2504224 .
геоі

1
geoand - Це те саме, що я пов'язав у фактичному запитанні, тому, боюся, це не корисно.
Аарон Зецкоскі

2
Дейв - додавши цю конфігурацію, я можу отримати доступ до консолі H2 і побачити таблиці, але це не допомагає мені зрозуміти, чи це правильний спосіб зробити це (я б вважав за краще отримати доступ до налаштування до весни, коли у мене немає налаштування) або як отримати пружину з'єднання JDBC.
Аарон Зецкоскі

1
Використання JDBC URL: JDBC: h2: мем: TESTDB
Чинмой

Відповіді:


110

Ось так я отримав консоль H2, яка працює у весняному завантаженні з H2. Я не впевнений, чи правильно це, але оскільки ніхто інший не запропонував рішення, то я збираюся запропонувати це найкращий спосіб зробити це.

У моєму випадку я вибрав конкретну назву для бази даних, щоб мені було що ввести при запуску консолі H2 (в даному випадку "AZ"). Я думаю, що все це потрібно, хоча здається, що вихід з платформи spring.jpa.database нічого не зашкодить.

В застосуванні властивості:

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 за адресою {server} / console /. Введіть це як URL-адресу JDBC: jdbc: h2: mem: AZ


1
Використовуючи new WebServlet()давати мені проблеми. Який клас для цього імпортує? Javax.servlet.annotation.WebServlet для мене - це єдиний варіант, і це лише інтерфейс.
Splaktar

5
О, я це зрозумів, org.h2.server.web.WebServlet - той, який потрібен. Мій проект не синхронізувався з Gradle для залучення нових бібліотек h2.
Splaktar

21
Шматки application.properties не потрібні. Ви можете просто скористатися доданою вами частиною Application.java, а потім підключитися до jdbc:h2:mem:testdbпорожнього імені користувача та порожнього пароля. localhost: 8082 працює з цією установкою.
Splaktar

2
@Splaktar Дякую! Я намагався зрозуміти, як підключитися, і пропущений фрагмент головоломки повинен був використовувати "testdb" для імені бази даних.
nerdherd

1
@Splaktar - ви повинні зробити свій коментар відповіддю. Як ви сказали, вихідний код для EmbeddedDatabaseConnection показує всі URI вбудованих підключень до DB за замовчуванням
karthik m

55

Станом на Spring Boot 1.3.0.M3, консоль H2 можна налаштувати автоматично.

Необхідними умовами є:

  • Ви розробляєте веб-додаток
  • Увімкнено інструменти Spring Boot Dev
  • Н2 стоїть на класі

Навіть якщо ви не використовуєте інструменти Spring Boot Dev, ви все одно можете автоматично налаштувати консоль, встановивши spring.h2.console.enabledнаtrue

Ознайомтеся з цією частиною документації на всі деталі.

Зауважте, що при налаштуваннях таким чином консоль доступна за адресою: http: // localhost: 8080 / h2-console /


Або, як пояснено в документі, ви ввімкнете його з spring.h2.console.enabled = true. З передумовами це вмикається автоматично.
keiki

Що саме Ви розробляєте веб-додаток ?
garci560

У контексті весняного завантаження це означає, що ви додали spring-boot-starter-webяк залежність
гео та

1
Також я думаю, що коли ви відкриєте localhost: 8080 / h2-консоль, вам потрібно написати jdbc: h2: mem: testdb в jdbc url, щоб побачити свої таблиці. А в URL- адресі localhost: 8080 / h2-консолі після localhost потрібно вказати порт програми.
ануджпрашар

3
@anujprashar Я впевнений, що jdbc:h2:mem:testdbце URL-адреса підключення, а не URL-адреса, якщо консоль доступна
geoand

44

Я знайшов хороший підручник з цієї теми:

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

В основному для мене правильною URL-адресою JDBC було: jdbc:h2:mem:testdb


1
тупе запитання, але це, здається, URL-адреса JDBC за замовчуванням, оскільки параметр spring.datasource.name за замовчуванням testdb. Чому, якщо це так, якщо я змінив ім'я db на щось на зразок foodb - jdbc все одно той самий, а не jdbc: h2: mem: foodb
Dan Vega

2
Цей URL-код jdbc jdbc: h2: mem: testdb правильний. Це допомогло мені нарешті підключитися до бази даних за замовчуванням, створеної весняними даними jpa.
Камаль Джоші

Ви можете встановити ім'я db як-небудь, наприклад: spring.datasource.url = jdbc: h2: mem: test; у application.properties
Олексій Майде

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.

Додавання вищевказаних двох рядків до мого файлу application.properties було достатньо для доступу до веб-консолі бази даних H2, використовуючи за замовчуванням ім'я користувача (sa) та пароль (порожні, як у випадку, коли не вводить пароль, коли вам запропонує ui).


1
Не повинно бути spring.h2.console.enabled=true? False відключить його. І spring.h2.console.path=/h2-consoleце зайве, оскільки /h2-consoleце за замовчуванням шлях від Spring Boot. Згідно з документацією "За замовчуванням консоль буде доступна на / h2-console. Ви можете налаштувати шлях до консолі, використовуючи властивість spring.h2.console.path." Детальніше тут docs.spring.io/spring-boot/docs/current/reference/html/…
georger

Я включив останнє властивість, щоб показати OP, де він може отримати доступ до консолі. Очевидно, що spring.h2.console.enabled.enabled = false відключить консоль, справа в тому, що це налаштовується як властивість. Я встановлю це властивість на істинне для ясності.
mancini0

20

Аналогічна відповідь із посібником "Крок за кроком".

  1. Додайте залежність від інструментів розробника до свого pom.xmlабоbuild.gradle

Мейвен

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

Градле

dependencies {
    compile("org.springframework.boot:spring-boot-devtools")
}
  1. Доступ до db з http://localhost:8080/h2-console/
  2. Вкажіть jdbc:h2:mem:testdbяк URL-адресу JDBC
  3. Ви повинні бачити сутність, яку ви вказали у своєму проекті, як таблицю.

2
додавши це в розділ залежності, працював для мене 'runtime ("com.h2database: h2")'
Раджа Нагендра Кумар

17

Я мав лише нижче властивості в /resources/application.properties. Після запуску весняного завантаження, використовуючи цю URL-адресу ( http: // localhost: 8080 / h2-console / ), таблиця на консолі H2 була видима і прочитана для перегляду даних таблиці, також ви можете запускати прості команди SQL. Одне, у вашому коді Java під час отримання даних назви стовпців є великими літерами, навіть якщо schema.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

Для Spring Boot 2.1.1 прямо з Spring Initialzr:

  1. За замовчуванням для devtools є http://127.0.0.1:8080/h2-console/

    • POM: spring-boot-starter, h2, spring-boot-starter-web, spring-boot-devtools
  2. Без devtools - вам потрібно встановити його у властивостях:spring.h2.console.enabled=true spring.h2.console.path=/h2-console

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

Як тільки ви туди потрапите - встановіть URL-адресу JDBC: jdbc: h2: mem: testdb (за замовчуванням не буде працювати)


10

Якщо ви використовуєте інструменти для розробників Spring Boot, він постачається з включеною за замовчуванням консоллю H2. Доступ до нього можна отримати з /h2-console/. На інтерфейсі входу для JDBC URLвикористання значення введення jdbc:h2:mem:testdb. Зверніть увагу на memрядок.

Якщо ви не використовуєте інструменти для розробників Spring Boot, ви можете включити консоль у application.propertiesвикористанні spring.h2.console.enabled=true. Це дозволить консолі під /h2-console. Якщо ви хочете змінити URL-адресу, ви можете додати ще один запис spring.h2.console.path=my_console_path.

Назва схеми за замовчуванням - testdb.

Детальніше в Spring завантаження документації .


4
Чому не jdbc:h2:mem:testdbвстановлено стандартну URL-адресу jdbc? Я витратив багато часу на роздуми про те, де мої сутності jpa пішли не так
Судіп Бхандарі

10

Перевірте застосування пружини. Властивості

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

тут testdb визначено базою даних Переконайтеся, що консоль h2 має те саме значення, під час підключення інших мудреців вона підключиться до db за замовчуванням

введіть тут опис зображення


1
бездоганна відповідь!
gaurav

6

Для того, щоб отримати таблиці, все, що вам потрібно зробити, це створити 2 sql файли schema.sql (для створення таблиці) і data.sql (дані для створених таблиць). Ці файли потрібно помістити в папку src / main / ресурси. Автомобільний весняний завантажувач автоматично виявляє їх та піклується про відпочинок під час виконання.

Якщо ви використовуєте більше 2 БД у своєму проекті, переконайтеся, що ви використовуєте конкретні файли, як-от (schema-h2.sql - для h2 DB, schema-oracle.sql - для Oracle DB). Те саме слід дотримуватися і для data.sql.

Також переконайтесь, що ви скидаєте таблиці, додаючи оператор таблиці таблиці у свою схему.sql як перший оператор. Щоб уникнути додавання дублікатів записів.

Посилання для весняного завантаження тут.

Моя application.properties полягає в наступному.

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/


"spring.jpa.hibernate.ddl-auto" двічі з різними значеннями ...
Юра

3

Я виявив, що з весняним завантаженням 2.0.2.RELEASE, налаштування spring-boot-starter-data-jpa та com.h2database у файлі POM недостатньо просто для роботи консолі H2. Ви повинні налаштувати spring-boot-devtools, як показано нижче. Необов'язково, ви можете дотримуватися інструкції Аарона Зекоскі в цій посаді

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

3

Використовуйте jdbc: h2: mem: testdb як свій шлях при вході в консоль H2.

Очевидно, що якщо ви змінили властивості Spring Boot, ваш джерело даних може бути різним, але, здається, ви боретеся з тим, як знайти за замовчуванням. Ось все, що там є! Ви побачите свою схему після входу в H2.


1

Я зробив дуже дурну помилку, коли мав цю саму проблему. Я додав H2 DB для запуску випадків блоку тестування і , отже я встановити , scopeщоб testв pom.xml. Під час запуску програми за допомогою mvn spring:runя видалив scopeі він працює нормально.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.