title: Tomcat Freezes deploying SpringBoot App
body: <p>I'm trying to deply some Apps (4 spring boot web apps) in Tomcat 9 , I noticed 2 of them make Tomcat log to display:</p>
  
  <pre><code>17-Nov-2016 00:15:07.110 INFO [localhost-startStop-2] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive /Users/viruskimera/apache-tomcat-9.0.0.M11/webapps/ftpoutbound990-0.0.1-SNAPSHOT.war
  </code></pre>
  
  <p>And it stays that way just deploying it doesn't display DEPLOYMENT FINISHED.
  the thing is that the App WORKS even when it doens't appear DEPLOYED completely.
  (I see my log4j entries and files are processed in the monitored folder)</p>
  
  <p>These apps monitor 2 different folders using Java watchService with the following code:</p>
  
  <p>package com.ftpoutbound990.monitor;</p>
  
  <pre><code>import java.io.File;
  import java.io.FileInputStream;
  import java.io.IOException;
  import java.io.InputStream;
  import java.nio.file.ClosedWatchServiceException;
  import java.nio.file.FileSystems;
  import java.nio.file.Path;
  import java.nio.file.Paths;
  import java.nio.file.StandardWatchEventKinds;
  import java.nio.file.WatchEvent;
  import java.nio.file.WatchKey;
  import java.nio.file.WatchService;
  
  import org.apache.log4j.Logger;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.beans.factory.annotation.Value;
  import org.springframework.stereotype.Component;
  
  import com.ftpoutbound990.client.FtpoutboundApp;
  
  @Component
  public class MonitorDirectory {
  
      final static Logger logger = Logger.getLogger(MonitorDirectory.class);
  
      @Autowired
      private FtpoutboundApp ftpoutboundapp;
  
      @Value("${folder990}")
      private String folder990;
  
      public void startMonitoring() throws IOException, InterruptedException {
          logger.info("INICIO DE MONITOREO DE ARCHIVOS 990");
          try (WatchService watchService = FileSystems.getDefault().newWatchService()) {
  
              Path faxFolder = Paths.get(folder990);
  
              WatchService watchmyservice = FileSystems.getDefault().newWatchService();
              faxFolder.register(watchmyservice, StandardWatchEventKinds.ENTRY_CREATE);
  
              boolean valid = true;
              do {
                  try {
                      WatchKey watchKey = watchmyservice.take();
  
                      for (WatchEvent event : watchKey.pollEvents()) {
                          WatchEvent.Kind kind = event.kind();
                          if (StandardWatchEventKinds.ENTRY_CREATE.equals(event.kind())) {
                              String fileName = event.context().toString();
                              logger.info("ARCHIVO NUEVO:" + fileName);
                              boolean isGrowing = false;
                              Long initialWeight = new Long(0);
                              Long finalWeight = new Long(0);
                              Path child = faxFolder.resolve(folder990 + fileName);
                              do {
                                  initialWeight = child.toFile().length();
                                  Thread.sleep(1000);
                                  finalWeight = child.toFile().length();
                                  isGrowing = initialWeight &lt; finalWeight;
                                  logger.info("AUN COPIANDO ARCHIVO:" + fileName);
                              } while (isGrowing);
                              logger.info("LISTO ARCHIVO:" + fileName);
                              getFile(fileName);
                          }
                      }
                      valid = watchKey.reset();
                      // Thread.sleep(1000 * 10);
                  } catch (InterruptedException | ClosedWatchServiceException e) {
                      //watchmyservice.close();
                      Thread.currentThread().interrupt();
                  }
  
              } while (valid);
          }
      }
  
      public void getFile(String fileName) throws IOException {
  
          File file = new File(folder990 + fileName);
          ftpoutboundapp.createGateway(file);
      }
  
  }
  </code></pre>
  
  <p>If I remove the Do-While the Apps do finished deployed! But why? It's a standard Java watchservice code, could anybody help me to realize what I'm missing/what's the issue?
  the thing is that Tomcat doesn't deploy my 4th App cause it keeps deploying the 3rd one.
  Thanks in advance for your help</p>
  
  <hr>
  
  <p>EDIT 1: ADDING THREAD</p>
  
  <pre><code>28-Dec-2016 17:57:27.558 INFO [main] org.apache.catalina.core.StandardServer.await A valid shutdown command was received via the shutdown port. Stopping the Server instance.
  28-Dec-2016 17:57:27.559 INFO [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-8080"]
  28-Dec-2016 17:57:27.613 INFO [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["ajp-nio-8009"]
  28-Dec-2016 17:57:27.664 INFO [main] org.apache.catalina.core.StandardService.stopInternal Stopping service Catalina
  28-Dec-2016 17:57:27.664 SEVERE [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.startup.HostConfig.deployWARs Error waiting for multi-thread deployment of WAR files to complete
   java.lang.InterruptedException
      at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:404)
      at java.util.concurrent.FutureTask.get(FutureTask.java:191)
      at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:744)
      at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:407)
      at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1595)
      at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:280)
      at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:92)
      at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1136)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1372)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1376)
      at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1344)
      at java.lang.Thread.run(Thread.java:745)
  
  28-Dec-2016 18:00:21.904 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/9.0.0.M11
  28-Dec-2016 18:00:21.907 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Oct 6 2016 18:54:10 UTC
  28-Dec-2016 18:00:21.908 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number:         9.0.0.0
  28-Dec-2016 18:00:21.908 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Mac OS X
  28-Dec-2016 18:00:21.908 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            10.9.5
  28-Dec-2016 18:00:21.908 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          x86_64
  28-Dec-2016 18:00:21.908 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/jre
  28-Dec-2016 18:00:21.908 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           1.8.0_73-b02
  28-Dec-2016 18:00:21.908 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
  28-Dec-2016 18:00:21.909 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /Users/viruskimera/apache-tomcat-9.0.0.M11
  28-Dec-2016 18:00:21.909 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /Users/viruskimera/apache-tomcat-9.0.0.M11
  28-Dec-2016 18:00:21.909 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/Users/viruskimera/apache-tomcat-9.0.0.M11/conf/logging.properties
  28-Dec-2016 18:00:21.909 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
  28-Dec-2016 18:00:21.909 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
  28-Dec-2016 18:00:21.910 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
  28-Dec-2016 18:00:21.910 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/Users/viruskimera/apache-tomcat-9.0.0.M11
  28-Dec-2016 18:00:21.910 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/Users/viruskimera/apache-tomcat-9.0.0.M11
  28-Dec-2016 18:00:21.910 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/Users/viruskimera/apache-tomcat-9.0.0.M11/temp
  28-Dec-2016 18:00:21.910 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /Users/viruskimera/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
  28-Dec-2016 18:00:22.063 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
  28-Dec-2016 18:00:22.093 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
  28-Dec-2016 18:00:22.096 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]
  28-Dec-2016 18:00:22.098 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
  28-Dec-2016 18:00:22.100 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 604 ms
  28-Dec-2016 18:00:22.145 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service Catalina
  28-Dec-2016 18:00:22.145 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/9.0.0.M11
  28-Dec-2016 18:00:22.224 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive /Users/viruskimera/apache-tomcat-9.0.0.M11/webapps/ftpoutbound990-0.0.1-SNAPSHOT.war
  28-Dec-2016 18:00:26.346 INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
  
    .   ____          _            __ _ _
   /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
  ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
   \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
    '  |____| .__|_| |_|_| |_\__, | / / / /
   =========|_|==============|___/=/_/_/_/
   :: Spring Boot ::        (v1.3.6.RELEASE)
  </code></pre>