58 lines
1.8 KiB
Markdown
58 lines
1.8 KiB
Markdown
|
---
|
|||
|
aliases:
|
|||
|
tags:
|
|||
|
- зрелость/🌱
|
|||
|
date:
|
|||
|
- - 2024-04-07
|
|||
|
zero-link:
|
|||
|
- "[[00 Java разработка]]"
|
|||
|
parents:
|
|||
|
linked:
|
|||
|
link: https://struchkov.dev/blog/ru/multiple-connections-to-h2/
|
|||
|
---
|
|||
|
Проблема с H2 в том, что когда запущено приложение, нельзя просто подключиться и посмотреть что происходит в БД.
|
|||
|
|
|||
|
Имеем следующее подключение к базе данных:
|
|||
|
|
|||
|
```yaml
|
|||
|
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
|
|||
|
```
|
|||
|
|
|||
|
Ограничение этого способа в том, что ==нельзя подключиться к базе, если приложение не работает.==
|