17 novembre 2007

Utiliser Mysql dans notre application Grails

Lorsque nous avons créé notre application, celle-ci se servait d'une base de données embarquée HSQLDB.
A chaque lancement de l'application, la base de données est initialisée et nous perdons donc les données d'un lancement à l'autre.
Nous allons voir comment utiliser une base de données Mysql pour notre application, pour avoir des données persistantes, même lorsque nous coupons notre serveur web Grails (basé sur Jetty).

Le premier pré-requis est d'avoir une base de données Mysql installée sur notre poste.
Vous pouvez installer Wamp, un installeur tout-en-un proposant un serveur Apache, Mysql et un interpréteur Php, c'est ce que j'ai fait car je travaille aussi sur Php.
Sinon, vous pouvez installer uniquement Mysql, par exemple en suivant ce tutoriel : Installation et configuration de Mysql 5.0 par Maximilian (developpez.com)

Pour manipuler simplement Mysql, un bon client que j'utilise : SqlYog.

Il nous faut aussi un connecteur JDBC Mysql, téléchargeable ici : Connector/J 5.1
Dezippez-le et copiez le fichier mysql-connector-java-5.1.5-bin.jar dans le répertoire annuaire\lib de notre application.

Avec le client sql, créez trois bases de données annuaire_dev, annuaire_test, annuaire_prod.

Enfin, éditez le fichier annuaire\grails-app\conf\DataSource.groovy, qui indique les paramètres de connexion aux bases de données nécessaires pour notre base de données.
Pour le moment, il se connecte à un serveur HSQLDB avec les paramètres :

dataSource {
pooled = false
driverClassName = "org.hsqldb.jdbcDriver"
username = "sa"
password = ""
}
hibernate {
cache.use_second_level_cache=true
cache.use_query_cache=true
cache.provider_class='org.hibernate.cache.EhCacheProvider'
}
// environment specific settings
environments {
development {
dataSource {
dbCreate = "create-drop" // one of 'create', 'create-drop','update'
url = "jdbc:hsqldb:mem:devDB"
}
}
test {
dataSource {
dbCreate = "update"
url = "jdbc:hsqldb:mem:testDb"
}
}
production {
dataSource {
dbCreate = "update"
url = "jdbc:hsqldb:file:prodDb;shutdown=true"
}
}
}

modifiez avec vos paramètres de connexion username et password.
Le driver pour se connecter à mysql est la classe com.mysql.jdbc.Driver.
Et il faut modifier les trois url des bases de dev, test et prod pour qu'elles pointent sur celles que l'on vient de créer.
Voici à quoi ressemble mon fichier de configuration modifié :

dataSource {
pooled = false
driverClassName = "com.mysql.jdbc.Driver"
username = "root"
password = ""
}
hibernate {
cache.use_second_level_cache=true
cache.use_query_cache=true
cache.provider_class='org.hibernate.cache.EhCacheProvider'
}
// environment specific settings
environments {
development {
dataSource {
dbCreate = "create-drop" // one of 'create', 'create-drop','update'
url = "jdbc:mysql://localhost/annuaire_dev"
}
}
test {
dataSource {
dbCreate = "update"
url = "jdbc:mysql://localhost/annuaire_test"
}
}
production {
dataSource {
dbCreate = "update"
url = "jdbc:mysql://localhost/annuaire_prod"
}
}
}

Il ne reste plus qu'à tester en relançant le serveur web Grails :
grails run-app
Si tout se passe bien, le script va créer automatiquement une table personne dans la base de dev qui stockera les données correspondant à notre classe Groovy Personne.

Aucun commentaire: