web-dev-qa-db-fra.com

Comment accéder en mémoire à la base de données h2 d'une application Spring Boot à partir d'une autre application Spring Boot

Dans mon projet, j'ai créé 3 applications de démarrage à ressort. La première application de démarrage du printemps a une base de données intégrée h2. Maintenant, je veux accéder à cette base de données à partir de mes deuxième et troisième applications de démarrage printanier directement sans écrire aucun service pour obtenir ces données. Alors quelqu'un peut-il me dire comment puis-je atteindre cet objectif?

6
raj

Vous pouvez configurer H2 Server comme Spring Bean.

Commencez par éditer pom.xml - supprimez <scope>runtime</scope> de la dépendance h2:

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

Ajoutez ensuite le bean serveur H2 à la classe SpringBootApplication ou 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");
    }
}

Last - edit application.properties - définissez le nom de la base de données:

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

Ensuite, vous pouvez vous connecter à ce serveur H2 depuis l’extérieur (par exemple, à votre application avec H2 DB) en utilisant cette connexion: 

jdbc:h2:tcp://localhost:9092/mem:dbname

En bonus, en utilisant cette URL, vous pouvez vous connecter à la base de données de votre application directement à partir de votre IDE .

METTRE &AGRAVE; JOUR

Il est possible qu'une erreur se produise lorsque vous essayez de vous connecter à l'application H2 pour Spring Boot version 1.5.x. Dans ce cas, remplacez une version de H2 par la version précédente, par exemple:

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

MISE À JOUR 2

Si vous devez exécuter plusieurs applications avec H2 simultanément sur le même hôte, vous devez définir les différents ports H2 sur elles dans Server.createTcpServer méthode, par exemple: 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");
}

Ensuite, vous pouvez vous connecter à la base de données H2 de ces applications avec les URL suivantes:

App1 H2: jdbc:h2:tcp://localhost:9092/mem:dbname
App2 H2: jdbc:h2:tcp://localhost:9093/mem:dbname
18
Cepr0

Vous pouvez exécuter H2 en mode serveur.

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

Comment utiliser h2 en tant que serveur

Question similaire 1

Question similaire 2

0
Anton Novopashin