title: Spring boot not resolving custom properties from application.properties during integration tests
body: <p>My Spring Boot test configuration is as follows:</p>
  
  <pre><code>@RunWith(SpringJUnit4ClassRunner.class)
  @SpringApplicationConfiguration(classes = {TestEnd2EndIntegrationConfiguration.class})
  @WebAppConfiguration
  @ActiveProfiles(Profiles.TEST)//=="test"
  @Transactional
  public abstract class AbstractEnd2EndIntegrationTest {
  
  }
  </code></pre>
  
  <p>Then from <code>application-test.properties</code> I have the following <strong>custom</strong> properties:</p>
  
  <pre><code>database.hibernate.dialect=org.hibernate.dialect.H2Dialect
  database.hibernate.hbm2ddl.auto=create
  database.hibernate.logSqlInfo=true
  </code></pre>
  
  <p>Which I use as follows:</p>
  
  <pre><code>@Value("${database.hibernate.dialect}")
  private String hibernateDialect;
  </code></pre>
  
  <p>However, the custom properties are not resolved and I get exceptions such as:</p>
  
  <pre><code>com.bignibou.it.controller.signup.SignupRestControllerTest &gt; shouldRejectUnavailableEmailAddress FAILED
      java.lang.IllegalStateException
          Caused by: org.springframework.beans.factory.BeanCreationException
              Caused by: org.hibernate.boot.registry.selector.spi.StrategySelectionException
  </code></pre>
  
  <p><strong>edit</strong>:</p>
  
  <p>Here is my gradle configuration:</p>
  
  <pre><code> sourceSets {
  
          main {
              output.resourcesDir = output.classesDir
          }
  
          integrationTest {
              java.srcDirs = ['src/it/java']
              resources.srcDirs = ['src/it/resources', 'src/main/resources']
              compileClasspath = sourceSets.main.output + configurations.testRuntime
              runtimeClasspath = output + compileClasspath
          }
      }
  
     task integrationTest(type: Test) {
          description "Run the integration tests."
          testClassesDir = sourceSets.integrationTest.output.classesDir
          classpath = sourceSets.integrationTest.runtimeClasspath
          reports.html.destination = file("$reports.html.destination/integration")
          reports.junitXml.destination = file("$reports.junitXml.destination/integration")
      }
  </code></pre>
  
  <p><strong>edit 2</strong>:</p>
  
  <p>When I run the tests from the IDE (intellij), I get a different error:</p>
  
  <pre><code>ava:342)
      at org.springframework.boot.SpringApplication.run(SpringApplication.java:273)
      at org.springframework.boot.test.SpringApplicationContextLoader.loadContext(SpringApplicationContextLoader.java:103)
      at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
      at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
      ... 36 more
  
  java.lang.IllegalStateException: Failed to load ApplicationContext
      at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
      at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
      at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:183)
      at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:123)
      at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:228)
      at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:217)
      at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:276)
      at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
      at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:278)
      at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:236)
      at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:87)
      at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
      at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
      at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
      at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
      at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
      at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
      at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
      at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
      at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)
      at org.junit.runners.Suite.runChild(Suite.java:128)
      at org.junit.runners.Suite.runChild(Suite.java:27)
      at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
      at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
      at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
      at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
      at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
      at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
      at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
      at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78)
      at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212)
      at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
  Caused by: java.lang.ClassCastException: org.springframework.boot.context.config.ConfigFileApplicationListener$ConfigurationPropertySources cannot be cast to org.springframework.boot.context.config.ConfigFileEnvironmentPostProcessor$ConfigurationPropertySources
      at org.springframework.boot.context.config.ConfigFileEnvironmentPostProcessor$ConfigurationPropertySources.finishAndRelocate(ConfigFileEnvironmentPostProcessor.java:528)
      at org.springframework.boot.context.config.ConfigFileEnvironmentPostProcessor$PropertySourceOrderingPostProcessor.reorderSources(ConfigFileEnvironmentPostProcessor.java:239)
      at org.springframework.boot.context.config.ConfigFileEnvironmentPostProcessor$PropertySourceOrderingPostProcessor.postProcessBeanFactory(ConfigFileEnvironmentPostProcessor.java:235)
      at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:284)
      at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:131)
      at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:673)
      at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:519)
      at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:667)
      at org.springframework.boot.SpringApplication.doRun(SpringApplication.java:342)
      at org.springframework.boot.SpringApplication.run(SpringApplication.java:273)
      at org.springframework.boot.test.SpringApplicationContextLoader.loadContext(SpringApplicationContextLoader.java:103)
      at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
      at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
      ... 36 more
  </code></pre>
  
  <p><strong>edit 3</strong>:</p>
  
  <p>Here is the <strong>detailed cause</strong> from the Gradle integrationTest</p>
  
  <pre><code>Caused by: org.hibernate.boot.registry.selector.spi.StrategySelectionException: Unable to resolve name [${database.hibernate.ejb.naming_strategy}] as strategy [org.hibernate.cfg.NamingStrategy]
      at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.selectStrategyImplementor(StrategySelectorImpl.java:128)
      at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveDefaultableStrategy(StrategySelectorImpl.java:155)
      at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveStrategy(StrategySelectorImpl.java:136)
      at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.processProperties(EntityManagerFactoryBuilderImpl.java:925)
      at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:840)
      at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:152)
      at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:343)
      at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318)
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
  </code></pre>
  
  <p><strong>edit 4</strong>: from a debug within: <code>EntityManagerFactoryBuilderImpl</code>:</p>
  
  <pre><code>configurationValues = {HashMap@4101}  size = 14
   0 = {HashMap$Node@4092} "hibernate.format_sql" -&gt; "${database.hibernate.logSqlInfo}"
   1 = {HashMap$Node@4096} "hibernate.use_sql_comments" -&gt; "${database.hibernate.logSqlInfo}"
   2 = {HashMap$Node@4107} "javax.persistence.nonJtaDataSource" -&gt; 
   3 = {HashMap$Node@4108} "hibernate.hbm2ddl.auto" -&gt; "${database.hibernate.hbm2ddl.auto}"
   4 = {HashMap$Node@4109} "javax.persistence.sharedCache.mode" -&gt; "ENABLE_SELECTIVE"
   5 = {HashMap$Node@4110} "hibernate.dialect" -&gt; "${database.hibernate.dialect}"
   6 = {HashMap$Node@4111} "hibernate.ejb.naming_strategy" -&gt; "${database.hibernate.ejb.naming_strategy}"
   7 = {HashMap$Node@4112} "hibernate.cache.use_second_level_cache" -&gt; "${database.hibernate.cache.use_second_level_cache}"
   8 = {HashMap$Node@4113} "hibernate.ejb.persistenceUnitName" -&gt; "default"
   9 = {HashMap$Node@4114} "hibernate.connection.charSet" -&gt; "${database.hibernate.connection.charSet}"
   10 = {HashMap$Node@4115} "hibernate.show_sql" -&gt; "${database.hibernate.logSqlInfo}"
   11 = {HashMap$Node@4116} "hibernate.cache.region.factory_class" -&gt; "org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory"
   12 = {HashMap$Node@4117} "hibernate.generate_statistics" -&gt; "${database.hibernate.generate_statistics}"
   13 = {HashMap$Node@4118} "javax.persistence.validation.mode" -&gt; "AUTO"
  </code></pre>
  
  <p>One can see that the properties are not expanded... Why is that?</p>