19.5 Property Placeholder Configuration 3.1.10

See the light - agile, industrial strength, rapid web application development made easy

(Quick Reference) # 19.5 Property Placeholder Configuration - Reference Documentation Authors: Graeme Rocher, Peter Ledbrook, Marc Palmer, Jeff Brown, Luke Daley, Burt Beckwith, Lari Hotari Version: 3.1.10 ## 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 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):
    database.driver="com.mysql.jdbc.Driver"
    database.dbname="mysql:mydb"
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. | Quick Reference (hide)