J'essaie simplement de voir le contenu de la base de données H2 pour une base de données H2 intégrée créée par spring-boot lorsque je ne spécifie rien dans mon application.properties et que je commence par mvn spring: run. Hibernate JPA crée les tables, mais si j'essaie d'accéder à la console h2 à l'URL ci-dessous, la base de données ne contient aucune table.
http://localhost:8080/console/
Je vois des suggestions comme celle-ci: Afficher le contenu de la base de données intégrée H2 lancée par Spring
Mais je ne sais pas où placer le XML suggéré dans spring-boot et même si je le faisais, je ne veux plus que la h2console soit disponible lorsqu'une base de données externe est configurée, il est donc plus probable que je doive le gérer. avec une sorte de code conditionnel (ou peut-être simplement permettre à spring de le gérer automatiquement dans le cas le plus idéal où je n'inclue que H2 lorsqu'un profil maven est activé).
Quelqu'un a-t-il un exemple de code montrant comment faire fonctionner la console H2 au démarrage (et également le moyen de savoir quelle est la chaîne de connexion jdbc utilisée par spring)?
C’est ainsi que j’ai fait fonctionner la console H2 dans Spring-Boot avec H2. Je ne suis pas sûr que ce soit correct, mais comme personne d'autre n'a proposé de solution, je vais suggérer que c'est la meilleure façon de le faire.
Dans mon cas, j'ai choisi un nom spécifique pour la base de données afin d'avoir quelque chose à saisir lors du démarrage de la console H2 (dans ce cas, "AZ"). Je pense que tout cela est nécessaire, même s'il semble que laisser de côté la plate-forme spring.jpa.database ne fait pas de mal.
Dans application.properties:
spring.datasource.url=jdbc:h2:mem:AZ;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
Dans Application.Java (ou une configuration):
@Bean
public ServletRegistrationBean h2servletRegistration() {
ServletRegistrationBean registration = new ServletRegistrationBean(new WebServlet());
registration.addUrlMappings("/console/*");
return registration;
}
Ensuite, vous pouvez accéder à la console H2 à partir de {serveur}/console /. Entrez ceci en tant qu'URL JDBC: jdbc: h2: mem: AZ
À partir de Spring Boot 1.3.0.M3
, la console H2 peut être configurée automatiquement.
Les prérequis sont:
Même si vous n'utilisez pas Spring Boot Dev Tools, vous pouvez toujours configurer automatiquement la console en définissant spring.h2.console.enabled
sur true
Consultez this une partie de la documentation pour tous les détails.
Notez que lors de cette configuration, la console est accessible à l’adresse: http: // localhost: 8080/h2-console/
J'ai trouvé un bon tutoriel sur ce sujet:
https://springframework.guru/using-the-h2-database-console-in-spring-boot-with-spring-security/
L'URL JDBC correcte pour moi était la suivante: jdbc:h2:mem:testdb
Une réponse similaire avec le guide étape par étape.
pom.xml
ou build.gradle
Maven
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
Gradle
dependencies {
compile("org.springframework.boot:spring-boot-devtools")
}
http://localhost:8080/h2-console/
jdbc:h2:mem:testdb
comme URL JDBCDe http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
Console Web H2 (H2ConsoleProperties):
spring.h2.console.enabled=true //Enable the console.
spring.h2.console.path=/h2-console //Path at which the console will be available.
L'ajout des deux lignes ci-dessus à mon fichier application.properties était suffisant pour accéder à la console Web de la base de données H2, à l'aide du nom d'utilisateur par défaut (sa) et du mot de passe (vide).
Je n'avais que des propriétés inférieures à /resources/application.properties. Après avoir exécuté Spring Boot, à l'aide de cette URL ( http: // localhost: 8080/h2-console/ ), la table de la console H2 était visible et lisible pour afficher les données de la table. Vous pouvez également exécuter des commandes SQL simples. Une chose, dans votre code Java, lors de la récupération de données, les noms de colonne sont en majuscule, même si schema.sql utilise des noms en minuscule :)
spring.datasource.initialize=true
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=- 1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true
Si vous utilisez les outils de développement de Spring Boot, H2 Console est activé par défaut. Vous pouvez y accéder à partir de /h2-console
/. Sur l'interface de connexion, pour saisir JDBC URL
, utilisez la valeur jdbc:h2:mem:testdb
. Faites attention à la chaîne mem
.
Si vous n'utilisez pas les outils de développement de Spring Boot, vous pouvez activer la console dans application.properties
à l'aide de spring.h2.console.enabled=true
. Cela activera la console sous /h2-console
. Si vous souhaitez modifier l'URL, vous pouvez ajouter une autre entrée avec spring.h2.console.path=my_console_path
.
Le nom de schéma par défaut est testdb
.
Plus de détails dans Documentation Spring Boot .
Pour Spring Boot 2.1.1 directement à partir de Spring Initialzr:
La valeur par défaut avec devtools est http://127.0.0.1:8080/h2-console/
Without devtools - vous devez le définir dans les propriétés: spring.h2.console.enabled=true spring.h2.console.path=/h2-console
Une fois que vous y êtes arrivé - définissez l'URL JDBC: jdbc: h2: mem: testdb (celle par défaut ne fonctionnera pas)
Pour obtenir les tables, il vous suffit de créer 2 fichiers SQL schema.sql (pour la création de table) et data.sql (données pour les tables créées). Ces fichiers doivent être placés dans le dossier src/main/resources. Spring Boot Auto les détecte et s’occupe du reste pendant l’exécution.
Si vous utilisez plus de 2 bases de données dans votre projet, assurez-vous d'utiliser des fichiers spécifiques tels que (schema-h2.sql - pour base de données h2, schema-Oracle.sql - pour base de données Oracle). La même chose à suivre pour data.sql aussi.
Assurez-vous également de supprimer les tables en ajoutant la première instruction à votre table schema.sql. Pour éviter d’ajouter des enregistrements en double.
Le lien pour le démarrage du printemps est ici.
Mon application.properties est comme suit.
spring.datasource.url=jdbc:h2:~/file/Shiva;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.platform=h2
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
spring.datasource.initialize=true
spring.error.whitelabel.enabled=true
spring.h2.console.path=/console
spring.jpa.hibernate.ddl-auto=none
spring.datasource.continue-on-error=true
spring.jpa.hibernate.ddl-auto=create
spring.hibernate.hbm2ddl.auto=update
spring.hibernate.show_sql=true
Vous pouvez suivre les étapes dans le lien ci-dessous.
https://springframework.guru/using-the-h2-database-console-in-spring-boot-with-spring-security/
J'ai trouvé qu'avec Spring Boot 2.0.2.RELEASE, la configuration de spring-boot-starter-data-jpa et de com.h2database dans le fichier POM ne suffisait pas pour que la console H2 fonctionne. Vous devez configurer spring-boot-devtools comme ci-dessous . Vous pouvez également suivre les instructions de Aaron Zeckoski dans ce message.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
Utilisez jdbc: h2: mem: testdb comme chemin d’accès pour vous connecter à la console H2.
Évidemment, si vous avez modifié les propriétés de Spring Boot, votre source de données peut être différente, mais il semble que vous ayez du mal à trouver la valeur par défaut. C'est tout ce qu'on peut en dire! Vous verrez votre schéma après vous être connecté à H2.
Vérifier le ressort application.properties
spring.datasource.url = jdbc: h2: mem: testdb; DB_CLOSE_DELAY = -1; DB_CLOSE_ON_EXIT = FALSE
ici testdb est défini par la base de données Assurez-vous que la console h2 a la même valeur lors de la connexion autrement elle se connectera à la base de données par défaut
J'avais commis une erreur très stupide quand j'avais le même problème. J'avais ajouté H2 DB pour l'exécution de cas de tests unitaires et j'avais donc défini la variable scope
à test
dans pom.xml
. Lors de l'exécution de l'application à l'aide de mvn spring:run
, j'ai supprimé la scope
et tout fonctionne correctement.