web-dev-qa-db-fra.com

Externaliser la configuration de la source de données Grails

Grails 1.x permet d’utiliser des fichiers de configuration externes en définissant la directive grails.config.locations . Existe-t-il une approche similaire pour externaliser la configuration de la base de données dans Datasource.groovy (sans configurer JNDI)?

Il serait utile de pouvoir configurer les informations d'identification de la base de données dans un simple fichier de configuration en dehors de l'application.

Merci d'avance!

36
miek

Vous pouvez utiliser un fichier de propriétés spécifié dans grails.config.locations pour externaliser la configuration de la source de données. Ci-dessous, voici comment j'ai généralement mis en place un projet Grails:

Dans mon DataSource.groovy, je le spécifie pour l'environnement de production:

  ....
  ....
  production {
    dataSource {
        dbCreate = "update"
        driverClassName = "com.myorg.jdbcDriverNotExists"
        url = ""
        username = ""
        password = ""
    }
  }
  ....
  ....

Je spécifie un fichier de propriétés externe dans mon fichier Config.groovy:

grails.config.locations = [ "classpath:app-config.properties"]

Dans le fichier de propriétés (stocké dans grails-app/conf /), je spécifie les informations de source de données réelles:

dataSource.driverClassName=Oracle.jdbc.OracleDriver
dataSource.url=jdbc:Oracle:thin:@Host:port:sid
dataSource.username=sa
dataSource.password=secret

J'utilise également le fichier de propriétés comme moyen de remplacer d'autres valeurs contenues dans Config.groovy. Lorsque l'application est déployée, si je dois modifier les informations de la source de données, il suffit d'éditer le fichier /WEB-INF/classes/app-config.properties, puis de le redémarrer.

51
John Wagenleitner

La réponse ci-dessus n’extériorise pas vraiment la configuration. Il est proche, mais la configuration réside toujours dans l'application. J'utiliserais un environnement JVM var au démarrage de l'application/du serveur pour pointer vers un emplacement extérieur à l'application où réside la configuration externe. Lisez la variable d'environnement dans le fichier config.groovy et utilisez-la pour obtenir le fichier de configuration externe. Quelque chose comme ça:

def extConfig = System.properties.getProperty('ENVVAR');
grails.config.locations = [ "file:${extConfig}/${appName}-config.groovy"]
25
Peter De Winter

Pour moi ça ne marche pas. Pour obtenir une variable d'environnement. 

Meilleure utilisation:

System.getenv().get("ENVVAR").toString()
1
Simon

Il suffit de mettre l’emplacement du fichier de configuration comme suit dans le fichier Config.groovy 

grails.config.locations = [
            "file:/yourDirectory/${appName}/${Environment.current.name}-datasource.properties",
            "file:/yourDirectory/${appName}/${Environment.current.name}-config.groovy",
            "classpath:${appName}-${Environment.current.name}-datasource.properties",
            "classpath:${appName}-${Environment.current.name}-config.groovy"
    ]

Et mettez tous les détails sur la source de données et d'autres valeurs de configuration dans votre fichier approprié. Par conséquent, vous pouvez externaliser la configuration et ne devez pas redémarrer pour modifier les valeurs.

0
jchhane_bro