Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Externalizing Grails Datasource configuration

Grails 1.x allows using external configuration files by setting the grails.config.locations directive. Is there a similar approach available for externalizing the database configuration in Datasource.groovy (without setting up JNDI)?

It would prove helpful to be able to configure DB credentials in a simple configuration file outside the application.

Thanks in advance!

like image 951
miek Avatar asked Jun 09 '09 13:06

miek


3 Answers

You can use a properties file specified in the grails.config.locations as a way to externalize the datasource configuration. Below is how I typically set up a Grails project:

In my DataSource.groovy I specify this for the production environment:

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

I specify an external properties file in my Config.groovy:

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

In the properties file (stored in grails-app/conf/) I specify the actual datasource info:

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

I also use the properties file as a way to override other values that are in Config.groovy. When the app is deployed, if I have to modify the datasource info I just edit the /WEB-INF/classes/app-config.properties file and restart.

like image 92
John Wagenleitner Avatar answered Sep 23 '22 06:09

John Wagenleitner


The answer above does not really externalize configuration. He is close, but the configuration is still residing in the application. I would use a JVM environment var on startup of the application/server to point to a location outside the application where the external configuration resides. Read out the environment var in the config.groovy file and use it get the external configuration file. Something like this:

def extConfig = System.properties.getProperty('ENVVAR');
grails.config.locations = [ "file:${extConfig}/${appName}-config.groovy"]
like image 33
Peter De Winter Avatar answered Sep 23 '22 06:09

Peter De Winter


For me this doesn't work. To get an environment variable.

Better use :

System.getenv().get("ENVVAR").toString()
like image 30
Simon Avatar answered Sep 22 '22 06:09

Simon