2017-09-28 102 views
1

我正在寫一個grails 3.1.8應用程序。我的數據源寫在application.groovy文件中。如何在grails 3.1.8中從外部文件加載數據源配置?

我想從外部文件加載數據源配置,如用戶名,密碼,數據庫。有沒有辦法在Grails 3+版本中使用它。

這裏是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 
     } 
    } 
} 

回答

3

這裏是爲我工作的解決方案,你可以試試。

該解決方案將Grails的3.0+

首先的工作,需要添加以下的依賴:

編譯 'org.grails.plugins:外部配置:1.1.2'

然後需要創建外部配置常規文件,例如:

DB-Config.groovy中

則需要在該配置文件放到應用程序目錄或Tomcat庫之外。例如:

d:\ Apache的Tomcat的8.0.47 \ lib中

然後需要從application.groovy讀取配置文件。 在application.groovy需要放置下列的每個環境的代碼行:

grails.config.locations = ['文件:/// $ {的catalina.home}/LIB/DB-配置。常規 ']

grails.config.locations = [' 文件:/// d:/apache-tomcat-8.0.47/lib/db-config.groovy」 ]

,如果你設置環境變量是CATALINA_HOME在您的系統可以使用$ {}的catalina.home。除了你必須使用我展示的直接路徑。

所以你application.groovy將是以下幾點:

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

和你DB-Config.groovy中文件將包含以下行:

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

您可以使用不同的DB-每個環境的config.groovy文件。

+0

很好的答案。這個對我有用。 – Rassel

0

您可以使用external-config Grails的插件,並在外部配置文件定義配置。

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

,然後定義在myconfig.groovy

2

數據源配置可以使用下面的實現從文件加載系統的外部配置文件。

本示例爲每個環境(開發/生產/測試)定義了到外部配置文件的單獨路徑。

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 
      ] 
    } 
} 

把你的數據庫配置在myconfig_developement.groovy如下:

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

您可以使用此解決方案(即工作對我來說,使用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)) 
     } 
    } 
} 

您可以使用環境變量的配置路徑:

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 
相關問題