it-swarm.com.ru

стандартное загрузочное соединение H2 jdbc (и консоль H2)

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

http://localhost:8080/console/

Я вижу такие предложения: Просмотр содержимого встроенной базы данных H2, запущенной Spring

Но я не знаю, куда поместить предложенный XML-файл при загрузке, и даже если бы я это сделал, я не хочу, чтобы h2console больше была доступна, когда настроена внешняя база данных, поэтому, скорее всего, мне нужно будет обработать это с каким-то условным кодом (или, может быть, просто позволить пружине автоматически обрабатывать его в наиболее идеальном случае, когда я включаю H2 только при активированном профиле maven).

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

84
Aaron Zeckoski

Вот так я получил консоль Н2, работающую в режиме весенней загрузки с Н2. Я не уверен, что это правильно, но поскольку никто другой не предложил решение, я собираюсь предположить, что это лучший способ сделать это.

В моем случае я выбрал конкретное имя для базы данных, чтобы мне было что ввести при запуске консоли H2 (в данном случае, «AZ»). Я думаю, что все это необходимо, хотя кажется, что если вы не укажете spring.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 в {server}/console /. Введите это как URL JDBC: jdbc: h2: mem: AZ

90
Aaron Zeckoski

Начиная с Spring Boot 1.3.0.M3, консоль H2 может быть настроена автоматически. 

Предпосылки:

  • Вы разрабатываете веб-приложение
  • Spring Boot Dev Tools включены
  • H2 находится на пути к классам

Даже если вы не используете Spring Boot Dev Tools, вы все равно можете автоматически настроить консоль, установив для spring.h2.console.enabled значение true

Проверьте это часть документации для всех деталей.

Обратите внимание, что при такой конфигурации консоль доступна по адресу: http: // localhost: 8080/h2-console/

44
geoand

Я нашел хороший учебник по этой теме:

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

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

41
Krzysztof Kaczor

Аналогичный ответ с пошаговым руководством.

  1. Добавить Инструменты разработчика зависимость от вашего pom.xml или build.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. Доступ к БД из http://localhost:8080/h2-console/
  2. Укажите jdbc:h2:mem:testdb в качестве URL JDBC
  3. Вы должны увидеть объект, который вы указали в своем проекте в виде таблицы.
18
biniam

От http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

H2 Web Console (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) и пароль (пусто).

16
mancini0

У меня были только ниже свойства в /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
14
rak22

Если вы используете инструменты разработчика 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 Boot Documentation .

8
georger

Для 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: стартер пружинный башмак, h2, стартер пружинный башмак

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

4
Witold Kaczurba

Чтобы получить таблицы, все, что вам нужно сделать, это создать 2 sql файла schema.sql (для создания таблицы) и data.sql (данные для созданных таблиц). Эти файлы должны быть помещены в папку src/main/resources. Spring boot auto обнаруживает их и заботится об остальном во время выполнения.

Если вы используете более 2 БД в своем проекте, убедитесь, что вы используете определенные файлы, такие как (schema-h2.sql - для h2 DB, schema-Oracle.sql - для Oracle DB). То же самое нужно соблюдать и для data.sql.

Также убедитесь, что вы отбрасываете таблицы, добавив оператор удаления таблицы в вашем schema.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.jpa.hibernate.ddl-auto=none
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/

4
kemparaj565

Я обнаружил, что при весенней загрузке 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>
2
Pragnesh Rana

Используйте jdbc: h2: mem: testdb в качестве пути при входе в консоль H2. 

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

2
user9023317

Проверьте приложение весны. Свойства

spring.datasource.url = JDBC: h2: MEM: TESTDB; DB_CLOSE_DELAY = -1; DB_CLOSE_ON_EXIT = FALSE,

здесь testdb - это база данных, определенная Убедитесь, что консоль h2 имеет то же значение, но при подключении будет подключаться к базе данных по умолчанию. 

 enter image description here

1
vaquar khan

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

1
AbhishekB