digital-garden/dev/snippet/Несколько подключений к базе H2.md
Struchkov Mark b1402afa7d
All checks were successful
continuous-integration/drone/push Build is passing
Несколько подключений к базе H2
2024-09-05 22:09:18 +03:00

59 lines
2.3 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
aliases:
tags:
- maturity/🌱
date:
- - 2024-04-07
zero-link:
- "[[../../meta/zero/00 Снипеты для Java|00 Снипеты для Java]]"
parents:
linked:
link: https://struchkov.dev/blog/ru/multiple-connections-to-h2/
---
Когда я создаю [обучающие репозитории к своим статьям](https://github.com/Example-uPagge), то использую H2 в качестве базы данных. Проблема с H2 в том, что когда запущено приложение, нельзя просто подключиться и посмотреть что происходит в БД. Эта заметка показывает, как провернуть этот финт.
Имеем следующее подключение к базе данных:
```yml
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:blog
password: password
username: sa
jpa:
hibernate:
ddl-auto: create-drop
database-platform: org.hibernate.dialect.H2Dialect
```
В вашем Spring приложении необходимо создать следующий `@Bean`:
```java
import org.h2.tools.Server;
@Configuration
public class BeanConfig {
@Bean(initMethod = "start", destroyMethod = "stop")
public Server inMemoryH2DatabaseaServer() throws SQLException {
return Server.createTcpServer("-tcp", "-tcpAllowOthers", "-tcpPort", "9090");
}
}
```
Это фактически создает сервер для остальных подключений к H2.
> [!WARNING]
> Если класс `org.h2.tools.Server` не находится, то скорее всего у зависимости для H2 установлен scope `runtime`. Удалите значение `scope` и класс появится.
Теперь можно подсоединиться к H2 используя следующий url:
```text
jdbc:h2:tcp://localhost:9090/mem:blog
```
![Так выглядит окно соединения в IntelliJ Idea](../../meta/files/images/data-sources-in-idea.png)
Ограничение этого способа в том, что ==нельзя подключиться к базе, если приложение не работает.==