code: private void startGeneralJobConfigFileMonitor()
        throws Exception {
      SchedulerUtils.addPathAlterationObserver(this.pathAlterationDetector, this.listener, jobConfigFileDirPath);
      this.pathAlterationDetector.start();
      this.closer.register(new Closeable() {
        @Override
        public void close() throws IOException {
          try {
            pathAlterationDetector.stop(1000);
          } catch (InterruptedException e) {
            throw new IOException(e);
          }
        }
      });
    }
docs: Start the job configuration file monitor using generic file system API.
  
  <p>
  The job configuration file monitor currently only supports monitoring the following types of changes:
  
  <ul>
  <li>New job configuration files.</li>
  <li>Changes to existing job configuration files.</li>
  <li>Changes to existing common properties file with a .properties extension.</li>
  <li>Deletion to existing job configuration files.</li>
  <li>Deletion to existing common properties file with a .properties extension.</li>
  </ul>
  </p>
  
  <p>
  This monitor has one limitation: in case more than one file including at least one common properties
  file are changed between two adjacent checks, the reloading of affected job configuration files may
  be intermixed and applied in an order that is not desirable. This is because the order the listener
  is called on the changes is not controlled by Gobblin, but instead by the monitor itself.
  </p>