gpt4 book ai didi

spring-boot - 如何从另一个Spring Boot应用程序访问一个Spring Boot应用程序的内存h2数据库

转载 作者:行者123 更新时间:2023-12-04 09:34:28 24 4
gpt4 key购买 nike

在我的项目中,我创建了3个spring boot应用程序。第一个spring boot应用程序具有h2嵌入式数据库。现在,我想直接从第二和第三次Spring Boot应用程序访问此数据库,而无需编写任何服务来获取此数据。那么有人可以告诉我如何实现这一目标吗?

最佳答案

您可以将H2 Server设置为Spring Bean。

首先编辑pom.xml-从h2依赖项中删除<scope>runtime</scope>:

<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>

然后将H2服务器bean添加到 SpringBootApplicationConfiguration类中:

@SpringBootApplication
public class Application {

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}

/**
* Start internal H2 server so we can query the DB from IDE
*
* @return H2 Server instance
* @throws SQLException
*/
@Bean(initMethod = "start", destroyMethod = "stop")
public Server h2Server() throws SQLException {
return Server.createTcpServer("-tcp", "-tcpAllowOthers", "-tcpPort", "9092");
}
}

最后-编辑 application.properties-设置数据库名称:
spring.datasource.url=jdbc:h2:mem:dbname
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.hibernate.ddl-auto=create

然后,您可以使用以下连接从外部连接到此H2服务器 (例如,使用H2 DB连接到您的应用程序):
jdbc:h2:tcp://localhost:9092/mem:dbname

作为使用此URL的奖励,您可以直接从IDE
连接到应用程序 的数据库。

更新

尝试连接到1.5.x版本的Spring Boot应用程序的H2时,可能会出现错误。在这种情况下,只需将H2的版本更改为以前的版本即可,例如:

<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.193</version>
</dependency>

更新2

如果您需要在同一主机上同时运行多个具有H2的应用程序,则应在Server.createTcpServer方法中为它们设置不同的H2端口,例如:9092、9093等。

// First App
@Bean(initMethod = "start", destroyMethod = "stop")
public Server h2Server() throws SQLException {
return Server.createTcpServer("-tcp", "-tcpAllowOthers", "-tcpPort", "9092");
}

// Second App
@Bean(initMethod = "start", destroyMethod = "stop")
public Server h2Server() throws SQLException {
return Server.createTcpServer("-tcp", "-tcpAllowOthers", "-tcpPort", "9093");
}

然后,您可以使用以下网址连接到这些应用程序的H2 DB:
App1 H2: jdbc:h2:tcp://localhost:9092/mem:dbname
App2 H2: jdbc:h2:tcp://localhost:9093/mem:dbname

关于spring-boot - 如何从另一个Spring Boot应用程序访问一个Spring Boot应用程序的内存h2数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43256295/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com