docs: public static void main(String[] args) {
          CitrusApp citrusApp = new CitrusApp(args);
  
          if (citrusApp.configuration.getTimeToLive() > 0) {
              CompletableFuture.runAsync(() -> {
                  try {
                      new CompletableFuture<Void>().get(citrusApp.configuration.getTimeToLive(), TimeUnit.MILLISECONDS);
                  } catch (InterruptedException | ExecutionException | TimeoutException e) {
                      log.info(String.format("Shutdown Citrus application after %s ms", citrusApp.configuration.getTimeToLive()));
                      citrusApp.stop();
                  }
              });
          }
  
          if (citrusApp.configuration.isSkipTests()) {
              if (citrusApp.configuration.getConfigClass() != null) {
                  Citrus.newInstance(citrusApp.configuration.getConfigClass());
              } else {
                  Citrus.newInstance();
              }
  
              setDefaultProperties(citrusApp.configuration);
          } else {
              try {
                  citrusApp.run();
              } finally {
                  if (citrusApp.configuration.getTimeToLive() == 0) {
                      citrusApp.stop();
                  }
              }
          }
  
          if (citrusApp.configuration.isSystemExit()) {
              if (citrusApp.waitForCompletion()) {
                  System.exit(0);
              } else {
                  System.exit(-1);
              }
          } else {
              citrusApp.waitForCompletion();
          }
      }