Using Maven properties in application.properties in Spring Boot

Before you do it, consider externalizing the properties file out of your deployable package. This way you can deploy the same compilation on every environment. It will save your Jenkins some work that is actually unnecessary. The best practice is to build your application only once, however, if you are not convinced, here is how to do it.

  1. In your pom.xml define the profiles with appropriate values for the property.

    <profile>
        <id>dev</id>
       <properties>
           <jdbc.url>your_dev_URL</jdbc.url>
       </properties>
    </profile>
    
  2. Setup the Maven Resources Plugin to filter the directory which contains your application.properties file.

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        ...
    </build>
    
  3. If you use Spring Boot 1.3 or more, you should be aware of the fact that to avoid conflicts between Spring Boot placeholders and tokens filtered by the Maven Resources Plugin, the framework introduced a solution that requires using a different syntax for filtered values.

    Now, instead ${property.key} you should use @property.key@. In this case, your application.properties must contain the following sample to work as you expect:

    [email protected]@
    

You can also check out a post about separating Spring properties files for different Maven profiles. That way you will externalize the values from your pom.xml.

Leave a Comment