title: ConfigurationProperties for String properties with multiple dots
body: <p>I'm trying to fix a bug in our company's homemade framework. Basically, we should be able to inject EclipseLink properties into the <code>EntityManager</code> through the following class which is part of our framework:</p>
  <pre class="lang-java prettyprint-override"><code>@ConfigurationProperties(prefix = &quot;our.framework.eclipselink&quot;)
  public class CustomEclipseLinkProperties {
  
      private Map&lt;String, Object&gt; properties;
  
      public Map&lt;String, Object&gt; getProperties() {
          return properties;
      }
  
      public void setProperties(Map&lt;String, Object&gt; properties) {
          this.properties = properties;
      }
  
      public String getBatchSize() {
          return (String) properties.get(PersistenceUnitProperties.BATCH_WRITING_SIZE);
      }
  
  }
  </code></pre>
  <p>Our service built on top of that framework has the following properties file (<code>application.properties</code>):</p>
  <pre><code>our.framework.eclipselink.properties.eclipselink.logging.level=FINEST
  our.framework.eclipselink.properties.eclipselink.logging.level.cache=FINEST
  our.framework.eclipselink.properties.eclipselink.logging.level.sql=FINEST
  our.framework.eclipselink.properties.eclipselink.logging.parameters=true
  
  our.framework.eclipselink.properties.eclipselink.jdbc.batch-writing.size=1000
  our.framework.eclipselink.properties.eclipselink.jdbc.bind-parameters=true
  our.framework.eclipselink.properties.eclipselink.jdbc.batch-writing=JDBC
  
  our.framework.eclipselink.properties.eclipselink.jpa.uppercase-column-names=false
  our.framework.eclipselink.properties.eclipselink.jpa.uppercase-columns=false
  </code></pre>
  <p>When I put a breakpoint after the <code>CustomEclipseLinkProperties</code> has been initialized, I can see that <code>getBatchSize()</code> returns <code>null</code>. If I look into <code>getProperties()</code>, I do see the values were detected, but they were inserted as a <code>LinkedHashMap</code>.</p>
  <p><a href="https://i.stack.imgur.com/nqMOU.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/nqMOU.png" alt="Debug mode" /></a></p>
  <p>The expected behavior would be that we would obtain a <code>Map</code> that would use the entire suffix as the String key, rather than getting this <code>LinkedHashMap</code> that has essentially called <code>String#split()</code> on the properties list. This would mean that the call to <code>getBatchSize()</code> would return <code>1000</code>.</p>
  <p>I've seen a few answers such as <a href="https://stackoverflow.com/a/31051377/9768291">this one</a> but they don't seem generic enough to my liking. <strong>Is there not a way to simply get the entire suffix as the key when injected by <code>@ConfigurationProperties</code>?</strong> Else, it seems like it would require intervention whenever we would want to support a different type of property.</p>