code: @SneakyThrows
      public DataSource createDataSource() {
          DataSource result = (DataSource) Class.forName(dataSourceClassName).newInstance();
          Method[] methods = result.getClass().getMethods();
          for (Entry<String, Object> entry : properties.entrySet()) {
              if (SKIPPED_PROPERTY_NAMES.contains(entry.getKey())) {
                  continue;
              }
              Optional<Method> setterMethod = findSetterMethod(methods, entry.getKey());
              if (setterMethod.isPresent()) {
                  setterMethod.get().invoke(result, entry.getValue());
              }
          }
          return result;
      }
docs: Create data source.
  
  @return data source