web-dev-qa-db-fra.com

problème avec INIT = RUNSCRIPT et les chemins relatifs

J'utilise les conventions maven pour les chemins source (src/main src/test) et j'ai mes scripts sql dans src/main/resources/scripts.

Je veux exécuter mon application avec de la mémoire H2 et je voudrais utiliser l'url jdbc pour initialiser ma base de données:

database.url=jdbc:h2:mem:;INIT=RUNSCRIPT FROM 'src/main/resources/scripts/create.sql';

Mon problème est que ce chemin relatif (src/main/...) ne fonctionne pas et que H2 ne plantera pas si la commande init = runscript ne cible rien.

Est-ce que quelqu'un sait quel chemin utiliser pour que cela fonctionne?

Merci

48
Maxime ARNSTAMM

Vous pouvez utiliser l'url suivante:
"jdbc:h2:mem:sample;INIT=RUNSCRIPT FROM 'classpath:scripts/create.sql'"

Avec celui-ci, il est possible d'exécuter un script à partir de classpath. Vous pouvez donc simplement le mettre src/main/resources/scripts ou src/test/resources/scripts dans votre projet maven (ou autre).

87
viktortnk

Je suggère d'essayer d'utiliser un chemin absolu pour les débutants, juste pour vérifier que tout fonctionne. Ensuite, vérifiez votre chemin de classe. Par exemple, bin/main/resources/scripts/create.sql, en supposant que bin est l'endroit où vos classes sont compilées et se trouve sur votre chemin de classe.

Étant donné que src, où réside votre source, n'est généralement pas sur le chemin de classe, cela pourrait être la source de votre problème.

2
darioo