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.
4 Réponses :
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.
Ç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".
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
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).
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!
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
Pourquoi l'avez-vous nommé
dev-data.sql
? Pourquoi pasdata.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 commepostgres
mais le schéma commemyschema
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 surdev
afin queapplication-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 celaRé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).