2017-09-28 4 views
1

J'écris une application de grails 3.1.8. Ma source de données écrite dans le fichier application.groovy.Comment charger la configuration de la source de données à partir d'un fichier externe dans grails 3.1.8?

Je veux charger la configuration de la source de données comme nom d'utilisateur, mot de passe, DB à partir d'un fichier externe. Y at-il un moyen de le faire dans les versions Grails 3+.

Voici ma configuration de source de données dans application.groovy: -

hibernate { 
    cache { 
     queries = false 
     use_second_level_cache = true 
     use_query_cache = false 
     region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory' 
    } 
} 

dataSource { 
    pooled = true 
    jmxExport = true 
    dialect = 'org.hibernate.dialect.PostgreSQLDialect' 
    driverClassName = 'org.postgresql.Driver' 
    username = 'postgres' 
    password = 'postgres' 
    properties = { 
     jmxEnabled = true 
     initialSize = 5 
     maxActive = 50 
     minIdle = 5 
     maxIdle = 25 
     maxWait = 10000 
     maxAge = 10 * 60000 
     timeBetweenEvictionRunsMillis = 5000 
     minEvictableIdleTimeMillis = 60000 
     validationQuery = "SELECT 1" 
     validationQueryTimeout = 3 
     validationInterval = 15000 
     testOnBorrow = true 
     testWhileIdle = true 
     testOnReturn = false 
     ignoreExceptionOnPreLoad = true 
     jdbcInterceptors = "ConnectionState;StatementCache(max=200)" 
     defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_COMMITTED // safe default 
     abandonWhenPercentageFull = 100 // settings are active only when pool is full 
     removeAbandonedTimeout = 120 
     removeAbandoned = true 
     logAbandoned = false // causes stacktrace recording overhead, use only for debugging 
    } 
} 

environments { 
    development { 
     dataSource { 
      dbCreate = 'update' 
      url = "jdbc:postgresql://localhost:5432/testdb" 
      logSql = true 
     } 
    } 
    test { 
     dataSource { 
      dbCreate = 'update' 
      url = "jdbc:postgresql://localhost:5432/testdb" 
      logSql = true 
     } 
    } 
    production { 
     dataSource { 
      dbCreate = 'update' 
      url = "jdbc:postgresql://localhost:5432/testdb" 
      logSql = true 
     } 
    } 
} 

Répondre

3

Voici la solution qui a fonctionné pour moi, vous pouvez essayer.

Cette solution fonctionnera pour Grails 3.0+

Tout d'abord besoin d'ajouter la dépendance suivante:

'Compile org.grails.plugins:-config externe: 1.1.2'

alors besoin de créer un fichier groovy de configuration externe par exemple:

db-config.groovy

alors besoin de placer ce fichier de configuration en dehors du répertoire d'application ou d'une bibliothèque tomcat. par exemple:

D: \ apache-tomcat-8.0.47 \ lib

alors besoin de lire le fichier config du application.groovy. En application.groovy besoin de placer suivant la ligne de code pour chaque environnement:

grails.config.locations = [ 'file: /// $ {} catalina.home/lib/db-config .groovy ']

ou

grails.config.locations = [' file: /// D: /apache-tomcat-8.0.47/lib/db-config.groovy » ]

vous pouvez utiliser $ {} catalina.home si vous définissez la variable d'environnement est CATALINA_HOME dans votre système. Autre que vous devez utiliser le chemin direct que j'ai montré.

Ainsi, votre application.groovy sera suivante:

> environments { 
>  development { 
>   grails.config.locations = ['file:///${catalina.home}/lib/db-config.groovy'] 
>  } 
>  production { 
>   grails.config.locations = ['file:///${catalina.home}/lib/db-config.groovy'] 
>   ] 
>  } 
> } 

et votre fichier db-config.groovy contiendra les lignes suivantes:

>  dataSource { 
>  username = <DB_USER_NAME> 
>  password = <DB_PASSWORD> 
>  dbCreate = 'update' 
>  url = <DB_URL> 
>  logSql = true 
>  } 

Vous pouvez utiliser différents DB- fichier config.groovy pour chaque environnement.

+0

Bonne réponse. ça marche pour moi. – Rassel

0

Vous pouvez utiliser external-config plug-in Grails et définir la configuration dans votre fichier de configuration externe.

grails.config.locations = [ 
     "file:///etc/app/myconfig.groovy" 
] 

Et puis définissez la configuration de source de données dans myconfig.groovy

2

Vous pouvez charger votre fichier de configuration externe du système de fichiers en utilisant l'implémentation suivante.

Cet exemple définit pour chaque environnement (développement/production/test) un chemin séparé vers un fichier de configuration externe.

environments { 
    development { 
      grails.config.locations = [ 
       "file:///home/<CONFIG_FILE_LOCATION_DIR>/myconfig_developement.groovy" //for Unix based systems 
      ] 
    } 
    production { 
      grails.config.locations = [ 
       "file:///home/<CONFIG_FILE_LOCATION_DIR>/myconfig_production.groovy" // for Unix based systems 
      ] 
    } 
} 

Mettez votre configuration de base de données myconfig_developement.groovy comme suit:

dataSource { 
    dbCreate = 'update' 
    url = "jdbc:postgresql://localhost:5432/testdb" 
    logSql = true 
} 
1

Vous pouvez utiliser cette solution (qui a fonctionné pour moi, avec Grails 3.1.x)

Grails-app/init/Application.groovy:

class Application extends GrailsAutoConfiguration implements EnvironmentAware { 
    static void main(String[] args) { 
     GrailsApp.run(Application, args) 
    } 

    @Override 
    void setEnvironment(Environment environment) { 
     def path = "/etc/grails-app-config.properties" 
     def file = new File(path) 

     if(file.exists()) { 
      def config = new ConfigSlurper().parse(file.text) 
      environment.propertySources.addFirst(new MapPropertySource(grails.util.Environment.getCurrent().name, config)) 
     } 
    } 
} 

vous pouvez utiliser la variable d'environnement pour la configuration chemin:

System.getenv(ENV_CONF_FILE_VAR) 

grails-app-config.properties:

dataSource.dbCreate='update' 
dataSource.driverClassName='com.mysql.jdbc.Driver' 
dataSource.url='jdbc:mysql://localhost:5432/testdb' 
dataSource.username='user' 
dataSource.password='pass' 
com.test='test' 
com.numTest=4