Azure WebApp 中的 Tomcat 无法启动



我在Azure中创建了一个Webapp,并在D:\home\site\wwwroot\webapps文件夹中上传了一个war文件。我使用具有标准定价层的应用服务计划。 我已经完成了在应用程序设置菜单中激活 Java 和 Tomcat 的设置:

  • Java版本:Java 8
  • java 次要版本:最新
  • Web容器:最新的雄猫

如果未激活"始终开启"选项,则我的雄猫无法启动。没有启动 java 进程,我的战争文件没有解压缩。我已经完成了应用程序的几次停止/启动,但没有任何反应。 激活"始终在线"后,Tomcat 启动并部署应用程序。 "始终开启"不适用于具有免费定价层的服务计划。

有谁知道为什么Azure会这样表现?

感谢您的反馈。 我昨天再次进行了测试,我想我已经了解了Azure WebApp的工作原理。 当您在 webapps 文件夹中上传战争文件时,即使 tomcat 配置为解压缩并加载战争,Java 进程也不会启动。

仅当您单击网站的 URL 时,它才会启动 java 进程。

如果不单击,则不会分叉任何 Java 进程。第一次点击将分叉Tomcat的java进程。

我想这是 IIS 工作人员的正常行为。

所以现在,当我部署 Java 应用程序时,我总是对 URL 执行触摸,以确保 Web 应用程序真正启动。

我试图重现您所说的通过 FTP 的行为,这是我在 Tomcat 8.5.6 上观察到的,正如@GopiKolla所说,如下所示。

  1. 如果禁用Always on选项,则上传的.war文件将不会自动解压缩。但是,当我尝试访问.war文件的 web 应用程序的 url 时,它被解压缩到一个目录,该目录在十秒后命名为与战争相同。
  2. 如果启用此选项,所有战争文件将自动解压缩。

我已经检查了所有配置和环境变量,其中包括属性autodeployunpackWARsdeployOnStartup等,这些不会随着选项切换而改变。我从Tomcat的官方相关文件(1,2,3)中搜索了此案的解释,没有任何有用的信息可以解释它。只是一个猜测,根据我的经验,我认为Azure通过IIS限制运行时的生命周期,以确定是否通过选项Always on激活web.config中定义的httpPlatformHandler过程。

希望对您有所帮助。

最新更新