code: protected void addMissingProperties(Properties source, Map<String, String> target) {
          if (source == null || source.isEmpty() || target == null)
              return;
  
          // only add "new" properties (first value wins)
          for (String key : source.stringPropertyNames()) {
              if (!target.containsKey(key) && key.length() > 0) {
                  // Check for a System property override first.
                  String value = System.getProperty(key);
                  if (value == null) {
                      value = source.getProperty(key);
                  }
                  // store the value in the target map
                  target.put(key, value);
              }
          }
      }
docs: Add properties from source to target if the target map does not
  already contain a property with that value. When a new attribute
  is discovered, System properties are checked to see if an override
  has been specified. If the property is present as a System property
  (from the command line or jvm.options), that value is used instead
  of bootstrap.properties.
  
  @param source The source properties file (bootstrap.properties or include)
  @param target The target map