1
votes

Le fichier data.sql par défaut de Springboot ne se charge pas au démarrage

J'ai cette application springboot qui fonctionne avec une base de données postgresql. Mon fichier application-dev.properties est le suivant:

delete from myschema.example_table where id > 0;

insert into myschema.example_table (id, val1, val2) values (1, "Hello", "Petecander");
insert into myschema.example_table (id, val1, val2) values (2, "Goodbye", "Gromenauer");

La base de données est installée sur ma machine de développement et déjà initialisée. dev-data.sql est dans src/main/resources/sql et pour le moment ne supprime que tout ce qui se trouve sur une table spécifique (appelons-le myschema.example_table ) et insère quelques registres. (Ceci est destiné à vérifier que la fonctionnalité fonctionne plutôt que pour une utilisation réelle):

spring.datasource.platform=postgres
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=root


spring.datasource.data=classpath:/sql/dev-data.sql


spring.jpa.properties.hibernate.default_schema=myschema

spring.jpa.show-sql=true
spring.jpa.database=POSTGRESQL

Mon problème est que ... rien ne se passe. C'est comme s'il n'y avait rien du tout lié au fichier dev-data.sql. Donc, je suis complètement perdu ici. Je navigue depuis un moment et je lis beaucoup de commutateurs différents qui peuvent être activés sur le fichier application.properties, mais rien. Une idée?

EDIT: Juste pour fournir un peu plus d'informations qui m'ont été demandées là-bas: l'application se charge bien et peut effectuer des tâches CRUD de base sur la base de données (il suffit de lire des informations pour le moment), donc le fichier application-dev.properties seens qui est chargé correctement.


3 commentaires

Pourquoi l'avez-vous nommé dev-data.sql ? Pourquoi pas data.sql ?


Je ne pense pas que spring.datasource.platform=postgres soit nécessaire car spring déterminera la base de données à partir de l'URL lorsque cela est possible. Vraisemblablement, si vous exécutez cela sur localhost, vous avez mappé le port à partir d'un conteneur docker? 5432 est-il le bon port? Vous avez spécifié DB comme postgres mais le schéma comme myschema pour hibernate - cela pourrait-il être un problème? Vraisemblablement, lorsque vous êtes une application de démarrage au printemps, elle définit le profil sur dev afin que application-dev.properties soit la source de propriété en cours d'utilisation? Je peux penser à des moyens de tester, mais il y a des questions auxquelles il faut répondre avant que vous puissiez avoir un plan pour déboguer cela


Répondre à @RobEvans: L'application exécute les opérations CRUD de base "très bien" et la base de données n'est pas dans un conteneur docker, mais installée sur ma machine de développement (nous sommes vraiment aux premiers stades de développement, l'idée va avec docker, mais pas encore). Et oui, le fichier application-dev.properties est en cours de chargement (il contient toutes les informations de connexion à la base de données, donc soit ça, soit par magie).


4 Réponses :


0
votes

J'ai rencontré un problème similaire et j'ai trouvé ma réponse ici . Si vous ajoutez:

spring.datasource.initialization-mode=always

Pour vos propriétés, cela devrait fonctionner.


3 commentaires

Ça n'a pas marché. C'était l'un des "nombreux commutateurs différents" que j'ai mentionnés dans mon message d'origine (j'ai déjà essayé beaucoup de combinaisons en vain).


êtes-vous sûr que les propriétés sont chargées?


Oui, le fichier application.properties n'a que spring.profiles.active=dev , application-dev.properties a toutes les données de connexion pour la base de données locale (et je peux effectuer des opérations CRUD de base) et la console me dit que fonctionne avec le profil "dev".



0
votes

Avez-vous essayé de nommer le fichier data.sql ? Je pense que cela pourrait aider https://www.baeldung.com/spring-boot-data-sql-and-schema-sql


0 commentaires

3
votes

Hibernate n'exécutera data.sql que pour créer ou créer-déposer

Ajoutez la propriété suivante aux propriétés de votre application spring.jpa.hibernate.ddl-auto=create ou spring.jpa.hibernate.ddl-auto=create-drop

Ceci est requis avec la propriété spring.datasource.initialization-mode=always pour les bases de données externes (non intégrées).


1 commentaires

Ouais, ça l'a fait! J'ai utilisé spring.jpa.hibernate.ddl-auto=update , car la base de données est créée et "stable" pour le moment (bien que mon idée pour le futur soit d'utiliser un ddl sur develop pour créer la base de données). J'ai dû résoudre quelques problèmes mineurs avec mon SQL et fonctionne maintenant. Merci!



0
votes

Pour une base de données intégrée comme h2, l'ajout des entrées ci-dessous dans application.properties a fonctionné pour moi.

spring.datasource.data = chemin de classe: mysql.sql


0 commentaires