【问题标题】:Spring Boot application with Telegram API does not work in Tomcat带有 Telegram API 的 Spring Boot 应用程序在 Tomcat 中不起作用
【发布时间】:2020-08-14 05:26:29
【问题描述】:

我开发了一个 Telegram 机器人,我希望它在 Tomcat 环境中运行。我将我的 java 程序转换为 this 的 Spring Boot 项目。

我的转换基本上是在 pom 中添加 spring boot 依赖,并将 main 类作为 spring boot runner。在 Eclipse 环境中,我的应用程序按预期运行。当我把它打包成war并部署到tomcat中时,业务逻辑并没有运行。春季启动启动,我可以看到它的日志。但是电报机器人没有初始化。

我还添加了一个返回“hello”的虚拟 RestController。当我运行 localhost:8080/endpoint 时,我可以看到“hello”。但是,Telegram 机器人未激活。

在一些资源中,他们说 telegrambots-spring-boot-starter 应该在项目中。我的电报依赖包含它。事实并非如此。我在 catalina.out 中没有收到任何错误日志。应用程序刚刚启动并保持原样。我不明白为什么。

感谢任何帮助。

【问题讨论】:

    标签: spring-boot tomcat telegram-bot


    【解决方案1】:

    这是因为您在 IftarVaktiApp 的 main 方法中初始化了您的机器人。它不再被调用,因为您没有在它的 main 方法中运行 IftarVaktiApp。您应该使用 EventListener 或只实现 CommandLineRunner。看到这个EventListener 或这个CommandLineRunner 并在那里初始化你的机器人。

    【讨论】:

      【解决方案2】:

      使用 Spring Boot 作为 (1) Tomcat 服务器上的企业应用程序,通过 .WAR 部署不同于 (2) 在您自己的 JVM 机器中运行 Java 代码。这意味着,在 Tomcat 服务器上部署 .WAR 时不会神奇地启动 main 方法。通过 Tomcat 网络服务器启动 Spring Boot 应用程序的工作方式不同,您应该根据 Spring Boot 项目指南重构整个 main 方法以从 Tomcat 环境中执行代码。

      我已经从 GitHub 克隆了你的项目,我可以看到这不是一个真正的 Spring Initializr 项目。如果您想在 Tomcat 上通过 Spring 运行代码,我建议您执行以下步骤:

      1. 通过https://start.spring.io/ 和...创建一个 Spring Initializr 项目...
      2. ...如果需要,请确保添加以下依赖项以访问全部功能:spring-boot-starter-web、spring-boot-starter-actuator、spring-boot-starter-tomcat em>
      3. 从 .iftarvakti GitHub 项目复制所有包并将它们重构/放置在新的 Spring 项目中 - 确保也导入所有依赖项
      4. 在根包中创建一个新的控制器,如“IftarVaktiController.java”:
      @RestController
      public class IftarVaktiController {
      
          @GetMapping("/startIftar")
          public void startIftar() {
              try {
                  ApiContextInitializer.init();
                  IftarVaktiBot bot = new IftarVaktiBot();
                  TelegramBotsApi telegramBotsApi = new TelegramBotsApi();
                  telegramBotsApi.registerBot(bot);
      
              } catch (TelegramApiException | IOException e) {
                  e.printStackTrace();
              }
          }
      }
      
      1. 与您对 HelloController 所做的一样,此 GET 请求由 Spring Boot 映射。如果你成功部署了项目,你可以访问 localhost:8080/startIftar,Java 代码会相应执行。

      ps。我没有对您的任何代码进行功能检查。

      【讨论】:

        猜你喜欢
        • 2014-10-31
        • 1970-01-01
        • 1970-01-01
        • 2017-10-21
        • 1970-01-01
        • 2020-03-05
        • 2018-03-15
        • 2021-08-01
        • 1970-01-01
        相关资源
        最近更新 更多