如何从另一个Spring Boot应用程序访问一个Spring Boot应用程序的内存h2数据库
在我的项目中,我创建了3个spring boot应用程序.第一个spring boot应用程序具有h2嵌入式数据库.现在,我想直接从第二和第三次Spring Boot应用程序访问此数据库,而无需编写任何服务来获取此数据.那么谁能告诉我如何做到这一点?
In my project, i have created 3 spring boot application. First spring boot application has h2 embedded database. Now i want to access this database from my 2nd and 3rd spring boot application directly without writing any services to get this data. So can anyone tell me how can i achieve this?
您可以将H2 Server设置为Spring Bean.
You can setup H2 Server as Spring Bean.
首先编辑pom.xml-从h2依赖项中删除<scope>runtime</scope>
:
First edit pom.xml - delete <scope>runtime</scope>
from h2 dependency:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
然后将H2服务器bean添加到SpringBootApplication
或Configuration
类:
Then add H2 server bean to SpringBootApplication
or Configuration
class:
@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
-设置数据库名称:
Last - edit application.properties
- set the name of the database:
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连接到您的应用程序):
Then you can connect to this H2 Server from outside (e.g. to your application with H2 DB) using this connection:
jdbc:h2:tcp://localhost:9092/mem:dbname
作为奖励,使用此URL,您可以
As a bonus using this url you can connect to the database of your app right from your IDE.
更新
尝试连接到1.5.x版本的Spring Boot应用程序的H2时,可能会出现错误.在这种情况下,只需将H2的版本更改为以前的版本即可,例如:
There is a chance of getting an error when trying to connect to the H2 for Spring Boot app of 1.5.x version. In this case just change a version of H2 to previous one, for example:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.193</version>
</dependency>
更新2
如果需要在同一主机上同时运行多个具有H2的应用程序,则应在Server.createTcpServer
方法中设置它们上不同的H2端口,例如:9092、9093等.
If you need to run several apps with H2 simultaneously on the same host you should set the different H2 ports on them in Server.createTcpServer
mothod, for example: 9092, 9093, etc..
// 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:
Then you can connect to the H2 DB of these apps with following urls:
App1 H2: jdbc:h2:tcp://localhost:9092/mem:dbname
App2 H2: jdbc:h2:tcp://localhost:9093/mem:dbname