当前位置: 首页 > 知识库问答 >
问题:

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

裘禄
2023-03-14

在我的项目中,我创建了3个Spring启动应用程序。第一个Spring启动应用程序有h2嵌入式数据库。现在我想直接从我的第二个和第三个Spring启动应用程序访问这个数据库,而无需编写任何服务来获取这些数据。所以有人能告诉我如何实现这一点吗?

共有2个答案

谭灿
2023-03-14

您可以在服务器模式下运行H2

import org.h2.tools.Server;
...
// start the TCP Server
server = Server.createTcpServer("-tcpAllowOthers").start();
...
// stop the TCP Server
server.stop();

Usage: java org.h2.tools.Server 
When running without options, -tcp, -web, -browser and -pg are started.
Options are case sensitive. Supported options are:
[-help] or [-?]         Print the list of options
[-web]                  Start the web server with the H2 Console
[-webAllowOthers]       Allow other computers to connect - see below
[-webDaemon]            Use a daemon thread
[-webPort ]       The port (default: 8082)
[-webSSL]               Use encrypted (HTTPS) connections
[-browser]              Start a browser connecting to the web server
[-tcp]                  Start the TCP server
[-tcpAllowOthers]       Allow other computers to connect - see below
[-tcpDaemon]            Use a daemon thread
[-tcpPort ]       The port (default: 9092)
[-tcpSSL]               Use encrypted (SSL) connections
[-tcpPassword ]    The password for shutting down a TCP server
[-tcpShutdown ""]  Stop the TCP server; example: tcp://localhost
[-tcpShutdownForce]     Do not wait until all connections are closed
[-pg]                   Start the PG server
[-pgAllowOthers]        Allow other computers to connect - see below
[-pgDaemon]             Use a daemon thread
[-pgPort ]        The port (default: 5435)
[-properties ""]   Server properties (default: ~, disable: null)
[-baseDir ]        The base directory for H2 databases (all servers)
[-ifExists]             Only existing databases may be opened (all servers)
[-trace]                Print additional trace information (all servers)
The options -xAllowOthers are potentially risky.
For details, see Advanced Topics / Protection against Remote Access.
See also http://h2database.com/javadoc/org/h2/tools/Server.html

如何使用h2作为服务器

类似问题1

类似问题2

严曜文
2023-03-14

您可以将H2服务器设置为Spring Bean。

首先编辑pom。xml-删除<代码>

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

然后将H2服务器bean添加到SpringBootApplication或Configuration类:

@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");
    }
}

最后-编辑应用程序。属性-设置数据库的名称:

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版Spring Boot应用程序的H2时,可能会出错。x版本。在这种情况下,只需将H2的一个版本更改为以前的版本,例如:

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

更新2

如果需要在同一台主机上同时运行多个H2应用程序,则应在服务器上设置不同的H2端口。createTcpServer方法,例如: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");
}

然后,您可以使用以下URL连接到这些应用程序的H2 DB:

App1 H2: jdbc:h2:tcp://localhost:9092/mem:dbname
App2 H2: jdbc:h2:tcp://localhost:9093/mem:dbname
 类似资料:
  • 我正在开发两个应用程序。让第一个应用程序是APP1,第二个应用程序为APP2。现在在APP1中,我不提供任何用户权限,如INTERNET权限,但它将发送任何http url,如http://www.google.com我的第二个APP2将包含INTERNET等用户权限。Http请求将从APP1发送到APP2,APP2将响应该请求,然后将结果发送回APP1。最后APP1包含一个Web视图以显示结果。

  • 问题内容: 我确信你们中有人注意到,如果您有Acrobat Reader(或其他PDF阅读器),并在Firefox中打开一个PDF,您会看到它嵌入在您的标签中。有什么方法可以将应用程序嵌入JFrame中? 问题答案: 这是一个相当棘手的问题。通常,诸如Adobe Reader之类的本机应用程序不提供可以嵌入到swing应用程序中的组件。但是在Windows中,有COM / OLE方法可以将应用程序

  • 问题内容: 是否可以在J2EE应用程序(EAR)中配置两个单独的Web应用程序(WAR)来访问共享会话上下文? 更多信息: 我最终从EAR创建了一个共享类,该类将所需的信息存储在静态成员中。即使看起来很脏,这也能解决问题。 问题答案: 不直接。大多数容器将每个WAR放置在以EAR类加载器作为其父级的单独的类加载器中。每个应用程序的会话都是独立的。您可以在每个会话中放入父EAR提供的内容。如果您需要

  • 我使用docker compose在docker容器中运行SpringBoot应用程序,在另一个docker集装箱中运行另一个VueJS应用程序。yml如下: 我试图调用SpringBoot REST API从我的VueJS应用程序使用超文本传输协议://backend: 8080/hello和它失败GET超文本传输协议://backend: 8080/hello net::ERR_NAME_NO

  • Google在这里有一个很好的页面展示了如何这样做:https://developer.android.com/distribute/tools/promote/linking.html 基本上,使用这段代码,它将打开Play Store到新apps页面: 我错过了什么?我肯定它非常简单,也许我需要进口的东西。 解决方案:导入Uri类是一个问题。我仍然不确定新的热键是什么来导入它。Apple-Sh

  • 问题内容: 我正在开发一个应用程序和一个小部件,该小部件需要从应用程序获取数据。我使用以下代码在NSUserDefaults上进行读写。而且我还使用了小部件并引用了这篇文章。但是小部件无法从应用程序或NSUserDefaults获取数据。我该如何运作? /////// 问题答案: 要从同一组NSUserDefaults中读取和保存,需要执行以下操作: 在您的主应用程序中,在项目导航器中选择您的项目