web-dev-qa-db-fra.com

Spring Boot + IntelliJ + Embedded Database = Maux de tête

Soit je manque un concept de base enfoui profondément dans une documentation (Spring, Spring Boot, H2, HSQLDB, Derby, IntelliJ), soit je le regarde depuis trop longtemps.

J'ai un projet Spring Boot en cours. J'ai essayé d'utiliser et d'initialiser une base de données H2 au début, j'ai essayé de me connecter à IntelliJ uniquement pour réaliser que je ne pouvais pas facilement parcourir la base de données sans abandonner mon premier-né ( Se connecter à la base de données H2 à l'aide du client de base de données IntelliJ ).

J'ai donc déménagé à DerbyDB. Même chose - le dossier racine db est créé dans mon application, je me connecte à celui-ci dans IntelliJ mais mes tables, qui viennent d'être créées au démarrage de l'application, ne sont pas disponibles pour naviguer.

J'ai même essayé SQLite, mais le support de SQLite n'est pas aussi bon et certaines fonctions de mise à jour n'étaient pas disponibles, mais j'ai pu au moins trouver mes tables dans le navigateur IntelliJ!

Je veux juste une base de données intégrée à un seul fichier que je peux utiliser, parcourir et jouer facilement. Aucune suggestion?!

Lorsque j'exécute l'application, je constate que le schéma est exporté:

2015-07-19 09:37:45.836  INFO 98608 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000227: Running hbm2ddl schema export
Hibernate: drop table user_roles if exists
Hibernate: drop table users if exists
Hibernate: create table user_roles (id bigint generated by default as identity, role_name varchar(255), version bigint, user_id bigint, primary key (id))
Hibernate: create table users (id bigint generated by default as identity, email varchar(255), password varchar(255), username varchar(255), version bigint, primary key (id))
Hibernate: alter table user_roles add constraint FK_g1uebn6mqk9qiaw45vnacmyo2 foreign key (user_id) references users
2015-07-19 09:37:45.849  INFO 98608 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000230: Schema export complete

Dans IntelliJ, rien (en utilisant une source distante de jdbc: h2: ./ test; AUTO_SERVER = TRUE selon la suggestion de heenenee):

enter image description here

Je vois des votes pour clore parce que ce n'est pas clair ce que je demande:

Comment développer des applications à l'aide de bases de données H2, HSQLDB ou Derby et s'y connecter avec IntelliJ?

18
Jack

Mode mixte automatique H2 devrait vous convenir. Utilisation jdbc:h2:~/mydbInHomeDir;AUTO_SERVER=TRUE comme votre spring.datasource.url. Dans IntelliJ, créez une source de données distante H2 et utilisez exactement la même URL JDBC. Vous devrez peut-être appuyer explicitement sur le bouton Synchroniser dans la fenêtre Base de données IntelliJ pour que les tables de base de données s'affichent.

15
heenenee

Pour ajouter à ce que Heenenee a mentionné ci-dessus. Si vous ne spécifiez pas AUTO_SERVER, une seule connexion sera autorisée à votre instance H2.

J'utilise spring-boot avec spring-data-jpa. Assurez-vous que @Entity a été déclaré pour vos entités qui représentent chaque table (s).

Voici mon application.yml/application.properties

spring.datasource.url: 
jdbc:h2:file:/Users/blah[![enter image description here][1]][1]/db/vlad4;AUTO_SERVER=TRUE
spring.datasource.username: sa
spring.datasource.password:

spring:
  jpa:
    hibernate:
      ddl-auto: create #will create schema based on entities
    show-sql: true

Démarrez votre application et importez-y des données. Spring Boot importera automatiquement vos données si vous avez import.sql dans le chemin de classe ex: /src/main/resources/import.sql

Configurez votre IntelliJ comme ça enter image description here

Si vous n'utilisez pas IntelliJ, téléchargez le combo serveur/client @ http://www.h2database.com/html/download.html extrayez-le et démarrez le client basé sur navigateur en utilisant:

h2/bin: Java -cp h2*.jar org.h2.tools.Server

Connectez-vous à votre base de données intégrée en spécifiant la chaîne de connexion: enter image description here

5
Vladimir

Si vous suivez les étapes de cet article: https://techdev.io/en/developer-blog/querying-the-embedded-h2-database-of-a-spring-boot-application

Je pense que cela vous aidera à obtenir une application Spring Boot avec une base de données H2 en mémoire exposée via un serveur TCP de sorte que vous puissiez utiliser le client de base de données IntelliJ pour vous y connecter.

3
Jason White

J'ai eu un problème similaire. C'était dû à la valeur par défaut create-drop stratégie ddl de l'hibernation. Avec cette stratégie après que la mise en veille prolongée de l'application a détruit le schéma à la fin de la session, c'est pourquoi IntelliJ n'affiche rien. Modifiez la stratégie ddl en create et hibernate créera le schéma et détruira les données précédentes au prochain démarrage de l'application.

Voici un exemple de ma configuration:

application.yml

spring:
  datasource.url: jdbc:h2:./db/testDb
  jpa.hibernate.ddl-auto: create

Propriétés de la base de données IntelliJ

enter image description here

Résultat

enter image description here

3
solomkinmv