Comment faire pour afficher le contenu de locaux h2 base de données(console web)?
Récemment, j'ai rejoint une nouvelle équipe et ici, les gars de h2 pour le service stub.
Je me demandais si je peux afficher le contenu de cette base de données en utilisant l'interface web. Au travail, il est disponible en allant à localhost:5080
J'ai un projet où j'utilise h2 base de données, mais je ne vois pas le h2 de la console web quand j'ai frappé localhost:5080
J'ai essayé aussi localhost:8082
- il également ne fonctionne pas.
Mon projet de configuration (fonctionne avec succès):
<bean id="wrappedDataSource" class="net.bull.javamelody.SpringDataSourceFactoryBean">
<property name="targetName" value="dataSource" />
</bean>
<bean id="wrappedDataSource" class="net.bull.javamelody.SpringDataSourceFactoryBean">
<property name="targetName" value="dataSource" />
</bean>
<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
<property name="driverClassName" value="org.h2.Driver" />
<property name="url" value="jdbc:h2:~/test;MODE=PostgreSQL" />
<property name="username" value="sa" />
<property name="password" value="" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="wrappedDataSource"/>
<property name="configLocation">
<value>classpath:hibernate-test.cfg.xml</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.connection.charSet">UTF-8</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hbm2ddl.auto">create-drop</prop>
</props>
</property>
</bean>
<context:property-placeholder location="classpath:jdbc.properties"/>
Je n'ai pas d'idées comment accéder à h2 de la console web. s'il vous plaît aider.
P. S.
Je vois les mentions de h2 que dans .m2
dossier
P. S. 2
J'ai remarqué que la console web disponibles par http://localhost:8082/
si l'option remplacer l'url dans la configuration avec:
<property name="url" value="jdbc:h2:tcp://localhost/~/test;MODE=PostgreSQL" />
Mais il fonctionne si j'ai déjà commencer à h2(dans .m2
dossier trouver h2
jar fichier et cliquez double-cliquez)
Si h2 est pas commencé quand je démarre l'application, je vois d'erreur suivant:
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:94)
...
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dbInitializer': Invocation of init method failed; nested exception is org.hibernate.exception.GenericJDBCException: Could not open connection
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136)
...
Caused by: org.hibernate.exception.GenericJDBCException: Could not open connection
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
...
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Соединение разорвано: "java.net.ConnectException: Connection refused: connect: localhost"
Connection is broken: "java.net.ConnectException: Connection refused: connect: localhost" [90067-182])
at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
...
Caused by: org.h2.jdbc.JdbcSQLException: Соединение разорвано: "java.net.ConnectException: Connection refused: connect: localhost"
Connection is broken: "java.net.ConnectException: Connection refused: connect: localhost" [90067-182]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
...
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
...
Je veux réaliser que h2 recommence si elle n'a commencé quand j'ai commence ma demande.
P. S. 3
J'ai essayé de l'écrit code suivant:
Server server = null;
try {
server = Server.createTcpServer("-tcpAllowOthers").start();
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:tcp://localhost/~/test;MODE=PostgreSQL", "sa", "");
} catch (Exception e) {
LOG.error("Error while initialize", e);
}
Je l'exécuter et après j'essaie de type localhost:9092
dans mon navigateur.
En ce moment, les téléchargements de fichiers. à l'intérieur de fichier le contenu suivant:
Version mismatch, driver version is “0” but server version is “15”
ma version h2 1.4.182
P. S. 4
Ce code fonctionne:
public class H2Starter extends ContextLoaderListener {
private static final Logger LOG = LoggerFactory.getLogger(H2Starter.class);
@Override
public void contextInitialized(ServletContextEvent event) {
startH2();
super.contextInitialized(event);
}
private static void startH2() {
try {
Server.createTcpServer("-tcpAllowOthers").start();
Class.forName("org.h2.Driver");
DriverManager.getConnection("jdbc:h2:tcp://localhost/~/test;MODE=PostgreSQL;AUTO_SERVER=TRUE", "sa", "");
Server.createWebServer().start();
} catch (Exception e) {
LOG.error("cannot start H2 [{}]", e);
}
}
public static void main(String[] args) {
startH2();
}
}
mais j'ai besoin de l'invoquer uniquement lorsque le béton printemps profil actif(maintenant elle fonctionne toujours)
Vous devez vous connecter pour publier un commentaire.
Nous allons diviser la question en deux parties.
Selon la façon dont vous spécifiez la connexion à H2, vous obtiendrez différents modes de fonctionnement.
Modes sont les suivants: Intégré, Mémoire, Serveur.
jdbc:h2:~/test
vous donne un H2 instance dans mode imbriqué.Le mode incorporé a une limitation d'être accessible que par le même chargeur de classe et même de la JVM (la preuve)
jdbc:h2:mem:test
vous en mémoire H2 instance. C'est aussi pas accessible depuis le monde extérieur.jdbc:h2:tcp://localhost/test
va commencer H2 serveur et il sera accessible de l'extérieur de la JVM mode serveur mais avec une limitation - le serveur doit être démarré avant que la connexion est établie.La dernière limitation est à l'origine de votre
Connection refused: connect: localhost"
exception.Pour la somme de tout:
jdbc:h2:tcp://localhost/test
en tant que chaîne de connexionMise à jour
Viens de remarquer que vous souhaitez démarrer le serveur dans le processus de lancement de l'application.
Vous pouvez le faire de plusieurs façons, selon comment vous démarrez l'application:
Mise à jour 2
Si la connexion à la base de données locale est nécessaire seulement pour le développement /débogage je voudrais effectuer tous les réglages à l'aide de maven profil. Les réponses de cette question permet de résoudre ce problème.
Si vous avez besoin d'accéder à la H2 de la base de données de la production (j'ai du mal à imaginer un cas d'utilisation pour que) il est préférable de le faire au printemps. Principalement parce que le conteneur de l'application /la configuration de l'environnement est susceptible d'être différent de la production (par rapport à l'environnement de développement).
Pour répondre à la question concernant les si pour démarrer le serveur à l'extérieur de Printemps contexte ou pas, selon les exigences.
Une chose que vous devez noter est que le serveur doit être démarré avant la source de données est démarrée (sinon, le printemps contexte ne se charge pas)
Mise à jour 3
Malheureusement, je ne suis pas en mesure de vous donner une solution de travail, mais selon les JavaDocs il y a une différence entre TCP serveur et le serveur Web.
Regardez de plus près à la JavaDoc de H2 de la classe de Serveur.
Je suppose que vous devriez utiliser
Server.createWebServer()
méthode pour créer le serveur (la différence entre TCP serveur et le serveur Web est queUne autre grande classe vous pouvez utiliser
org.h2.tools.Console
(JavaDoc ici)Il suffit d'exécuter la méthode main de la Console et je pense qu'il devrait tout résoudre.
Vous devriez être en mesure d'utiliser la mémoire ou fichier de la base de variantes, et puis dans votre application le feu jusqu'à l'H2 serveur TCP séparément, par exemple à l'aide d'un Ressort de haricot (l'esprit de la semi-pseudo-code et port d'échantillon):
Voir http://www.h2database.com/html/tutorial.html#using_server
Comment sur la modification de jdbc url dans la configuration d'inclure
pour commencer h2 automatiquement.
Voir Auto en mode mixte