database.driver="com.mysql.jdbc.Driver"
database.dbname="mysql:mydb"
19.5 Property Placeholder Configuration
Version: 3.2.8
19.5 Property Placeholder Configuration
Grails supports the notion of property placeholder configuration through an extended version of Spring’s PropertyPlaceholderConfigurer.
Settings defined in either hhttp://docs.groovy-lang.org/latest/html/gapi/groovy/util/ConfigSlurper.html[ConfigSlurper] scripts or Java properties files can be used as placeholder values for Spring configuration in grails-app/conf/spring/resources.xml
and grails-app/conf/spring/resources.groovy
. For example given the following entries in grails-app/conf/application.groovy
(or an externalized config):
You can then specify placeholders in resources.xml
as follows using the familiar ${..} syntax:
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>${database.driver}</value>
</property>
<property name="url">
<value>jdbc:${database.dbname}</value>
</property>
</bean>
To specify placeholders in resources.groovy
you need to use single quotes:
dataSource(org.springframework.jdbc.datasource.DriverManagerDataSource) {
driverClassName = '${database.driver}'
url = 'jdbc:${database.dbname}'
}
This sets the property value to a literal string which is later resolved against the config by Spring’s PropertyPlaceholderConfigurer.
A better option for resources.groovy
is to access properties through the grailsApplication
variable:
dataSource(org.springframework.jdbc.datasource.DriverManagerDataSource) {
driverClassName = grailsApplication.config.database.driver
url = "jdbc\:${grailsApplication.config.database.dbname}"
}
Using this approach will keep the types as defined in your config.