Une solution c'est de démarrer une base de données de type H2 ou HsqlDb.
Pour démarrer une base de données H2, il faut utiliser une le plugin exec-maven-plugin .
Je vous conseille d'ajouter le plugin dans un profile, on a fréquemment besoin du plugin exec plus d'une fois dans un projet.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<profiles>
<profile>
<id>start-h2</id>
<dependencies>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.162</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>org.h2.tools.Server</mainClass>
<arguments>
<!-- Start also UI -->
<argument>-web</argument>
<!-- db is available via tcp -->
<argument>-tcp</argument>
<!-- local file is present in project-->
<argument>-baseDir</argument>
<argument>${basedir}/${local-h2-directory}</argument>
<!-- Other computers can connect to this db -->
<argument>-webAllowOthers</argument>
<argument>-webPort</argument>
<argument>${h2database.port}</argument>
<!-- uncomment if you want to open h2 UI automatically -->
<!-- <argument>-browser</argument> -->
</arguments>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Il faut ajouter la dépendance à H2.
J'ai setté la variable local-h2-directory par local-ignore, ça évite que les fichiers h2 soient supprimés quand vous faites un mvn clean.
L'argument -tcp indique que la connexion à la bdd se fait via tcp, vous pouvez aussi côté client, spécifier une connexion par fichier, ça évite de devoir démarrer la bdd h2, mais dans ce cas, une seule application pourra se connecter à la bdd. En mode tcp, plusieurs jvm peuvent accéder à la bdd.
Pour initialiser la base, utilisez sql-maven-plugin :
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<profile> | |
<id>init-db</id> | |
<build> | |
<plugins> | |
<plugin> | |
<groupId>org.codehaus.mojo</groupId> | |
<artifactId>sql-maven-plugin</artifactId> | |
<version>1.5</version> | |
<dependencies> | |
<dependency> | |
<groupId>com.h2database</groupId> | |
<artifactId>h2</artifactId> | |
<version>1.3.160</version> | |
</dependency> | |
</dependencies> | |
<executions> | |
<execution> | |
<goals> | |
<goal>execute</goal> | |
</goals> | |
<phase>process-resources</phase> | |
</execution> | |
</executions> | |
<configuration> | |
<driver>org.h2.Driver</driver> | |
<url>jdbc:h2:tcp://localhost/bdd;MODE=MySQL</url> | |
<username>sa</username> | |
<password /> | |
<autocommit>true</autocommit> | |
<srcFiles> | |
<srcFile>src/main/local/sql/dev-schema.sql</srcFile> | |
</srcFiles> | |
</configuration> | |
</plugin> | |
</plugins> | |
</build> | |
</profile> |
Par défaut, le login d'accès à une base h2 est "sa" et il n'y a pas de mot de passe, l'adresse jdbc : jdbc:h2:tcp://localhost/bdd;MODE=MySQL. Le paramètre ";MODE=MySQL" indique au driver de "parler" le sql en mode MySQL.
Je n'ai pas eu trop de souci, sur le projet dans lequel je l'ai rajouté, mais H2 n'est pas 100% compatible avec MySQL. Les vues par exemple ne sont pas gérés, et des paramètres sql trop spécifique ne fonctionne pas forcément de la même façon.