spring 无法部署到本地tomcat Sping Boot 3.1

dddzy1tm  于 2023-08-02  发布在  Spring
关注(0)|答案(2)|浏览(180)

我在后端业务方面非常绿色,我不明白为什么我不能让我的应用程序工作。
这是一个简单的WebHook fetcher,来自Postman中的JSON。
用postman测试,当用Spring在localhost:8080中启动它时,它可以工作,当我把.war放入tomcat服务器时,它不能工作。
为了创建.war文件,我使用mvn clean install./mvn clean package
终端对第二个命令的响应如下:

Plugin validation issues were detected in 1 plugin(s)
  * org.apache.maven.plugins:maven-war-plugin:3.2.2

字符串
这可能是tomcat不工作的原因吗?可能是我的代码有问题
Tomcat版本为9.0.78 Application.properties为空。
这是我的pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>3.1.1</version>
       <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <groupId>test.gio</groupId>
   <artifactId>TestFinal</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>war</packaging>
   <name>TestFinal</name>
   <description>Demo project for webhook</description>
   <properties>
       <java.version>17</java.version>
   </properties>
   <dependencies>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-tomcat</artifactId>
           <scope>provided</scope>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-data-jpa</artifactId>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
       <dependency>
           <groupId>com.h2database</groupId>
           <artifactId>h2</artifactId>
           <scope>runtime</scope>
       </dependency>
        <dependency>
           <groupId>org.apache.tomcat.embed</groupId>
           <artifactId>tomcat-embed-jasper</artifactId>
           <scope>provided</scope>
           <version>9.0.75</version>
       </dependency>

       <dependency>
           <groupId>org.projectlombok</groupId>
           <artifactId>lombok</artifactId>
           <optional>true</optional>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-test</artifactId>
           <scope>test</scope>
       </dependency>
       <dependency>
           <groupId>com.fasterxml.jackson.core</groupId>
           <artifactId>jackson-databind</artifactId>
           <version>2.15.2</version>
       </dependency>
   </dependencies>

   <build>
       <finalName>TestFinal</finalName>
       <plugins>
           <plugin>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-maven-plugin</artifactId>
               <configuration>
                   <excludes>
                       <exclude>
                           <groupId>org.projectlombok</groupId>
                           <artifactId>lombok</artifactId>
                       </exclude>
                   </excludes>
               </configuration>
           </plugin>
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-war-plugin</artifactId>
               <version>3.2.2</version>
               <configuration>
                   <failOnMissingWebXml>false</failOnMissingWebXml>
               </configuration>
           </plugin>
       </plugins>
   </build>

</project>


我的controller.java:

@RestController
public class WebHookController {

    @PostMapping("/webhook")
    public ResponseEntity<String> webhook(@RequestBody OrderPayload orderPayload) {
        System.out.println("Webhook received!");
        orderPayloadService.processOrderPayload(orderPayload);
        return ResponseEntity.ok("Webhook received! Sei un grande :)");
    }

  @GetMapping("/hello")
    public String hello()
    {
        return "Hello User, have a nice day.";
    }
}


我的Application.java:

@SpringBootApplication
public class TestFinalApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
    {
        return application.sources(TestFinalApplication.class);
    }
    @RequestMapping("/TestFinal")
    public static void main(String[] args) {
        SpringApplication.run(TestFinalApplication.class, args);
    }

}


还有我的servletinitializer.java:

public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(TestFinalApplication.class);
    }

}


你能告诉我我做错了什么吗我很绝望

nukf8bse

nukf8bse1#

您正在使用Tomcat 9.0.x which supports Servlet 4.0和Sping Boot 3.x,这需要Servlet 5.0+兼容的容器。如果您希望能够将Sping Boot 3应用程序部署到Tomcat 10.1,则必须使用Tomcat 10.1。

hsvhsicv

hsvhsicv2#

我在pom.xml文件中删除了这个依赖项:

<dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
        <version>9.0.75</version>
    </dependency>

字符串
而且成功了!

相关问题