Externalizing Grails Datasource configuration
Solution 1
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.
Solution 2
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"]
Solution 3
For me this doesn't work. To get an environment variable.
Better use :
System.getenv().get("ENVVAR").toString()
miek
A web generalist from Tampere, a nice town in Northern Europe.
Updated on July 29, 2020Comments
-
miek almost 4 years
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!
-
miek almost 15 yearsThis looks like just what I was after! Thank you for your clear and concise answer, John :)
-
Brad Rhoads over 14 yearsThis looks like a great solution, except you do have edits after an upgrade. For externalizing the configuration see blog.zmok.net/articles/2009/04/22/…
-
Fernando about 14 yearsAs Brad pointed out, this isn't a viable solution for deploying a war. The link he posts is a better answer.
-
hfm over 8 yearsAs neomusashi mentioned, I don't think this is a good solution. Usually you want to have the application configuration outside the application package and source code.
-
Dany Y over 6 yearsone small question, if I don't specify "properties" for the datasource (the info of reconnect,...) will they still be taken from datasource.groovy ?