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?
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
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