Spring 无法访问Tomcat上部署的WAR文件
我有一个SpringBootREST服务项目,它在我的本地机器上工作。当我以“Spring Boot应用程序”运行应用程序时 我可以通过转到访问rest服务 它按预期返回JSON 我将pom.xml包更改为war,然后通过在Spring工具套装中运行->Maven build创建了一个war。它创建一个war文件。当我上传war文件时,我没有收到任何错误,它显示在应用程序下 war文件名为“myapp-0.0.1-SNAPSHOT.war”,上传后,我试图通过访问 但我有一个404错误 我做错了什么 我的pom.xmlSpring 无法访问Tomcat上部署的WAR文件,spring,tomcat,spring-boot,tomcat8,spring-web,Spring,Tomcat,Spring Boot,Tomcat8,Spring Web,我有一个SpringBootREST服务项目,它在我的本地机器上工作。当我以“Spring Boot应用程序”运行应用程序时 我可以通过转到访问rest服务 它按预期返回JSON 我将pom.xml包更改为war,然后通过在Spring工具套装中运行->Maven build创建了一个war。它创建一个war文件。当我上传war文件时,我没有收到任何错误,它显示在应用程序下 war文件名为“myapp-0.0.1-SNAPSHOT.war”,上传后,我试图通过访问 但我有一个404错误 我做
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>myapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>myapp</name>
<description>myappapi</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<packaging>war</packaging>
</project>
MyappApplication.java
package com.mycompany;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class MyappApplication {
public static void main(String[] args) {
SpringApplication.run(MyappApplication.class, args);
}
}
如果您要将jar更改为spring启动之战,请添加以下依赖项
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
org.springframework.boot
如果要将jar更改为spring启动之战,请添加以下依赖项
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
org.springframework.boot
将spring boot可执行jar更改为可部署war的清单
将pom.xml中的打包从“jar”更改为“war”
正如kuhajeyan提到的,将嵌入的tomcat依赖项标记为pom.xml中提供的
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
将spring boot可执行jar更改为可部署war的清单
将pom.xml中的打包从“jar”更改为“war”
正如kuhajeyan提到的,将嵌入的tomcat依赖项标记为pom.xml中提供的
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
参考:
正如注释中提到的,您可以通过将war部署到独立的tomcat实例来部署spring引导应用程序。您需要对具有main()
方法的MyappApplication.java
类进行一些更改
- 使您的
MyappApplication
扩展SpringBootServletilizer
并重写其configure()
方法
@SpringBootApplication
public class MyappApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(MyappApplication.class, args);
}
}
- 下一步是将打包为war,而不是您已经拥有的默认jar
- 最后,在
pom.xml
中,将嵌入式tomcat容器的作用域更改为提供的
,以便在部署到单独实例时不会发生冲突
参考:
正如注释中提到的,您可以通过将war部署到独立的tomcat实例来部署spring引导应用程序。您需要对具有main()
方法的MyappApplication.java
类进行一些更改
- 使您的
MyappApplication
扩展SpringBootServletilizer
并重写其configure()
方法
@SpringBootApplication
public class MyappApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(MyappApplication.class, args);
}
}
- 下一步是将打包为war,而不是您已经拥有的默认jar
- 最后,在
pom.xml
中,将嵌入式tomcat容器的作用域更改为提供的
,以便在部署到单独实例时不会发生冲突
您可以在pom.xml中将buid名称更改为myapp。检查服务器启动时是否注册了/persons/all
。如果不是,它将显示404错误,因为您的控制器没有正确注册。@幸运的是,应用程序在我的本地计算机上运行良好。它是否可能在Spring boot中本地注册,但在使用war文件部署到Tomcat上时不注册?是的,请检查您的Tomcat服务器日志。Spring boot使用嵌入式tomcat。您正在部署到一个单独的tomcat实例中。两者都不一样。@Lucky在启动tomcat之后,我确实看到myapp正在部署,但没有关于/persons/我希望您的组件、配置和服务都在公司的包中。如果没有,请将其放在本包装内。另外,不要使用三个@Configuration
、@EnableAutoConfiguration
和@ComponentScan
注释,而是使用这个@springbootplication
注释。还要将springwebmvc
依赖项添加到您的webapp中。这将应用程序标记为web应用程序,并激活关键行为,如设置DispatcherServlet
(即,类似于添加@EnableWebMvc
),您可以在pom.xml中将内置名称更改为myapp。检查服务器启动时是否注册了/persons/all
。如果不是,它将显示404错误,因为您的控制器没有正确注册。@幸运的是,应用程序在我的本地计算机上运行良好。它是否可能在Spring boot中本地注册,但在使用war文件部署到Tomcat上时不注册?是的,请检查您的Tomcat服务器日志。Spring boot使用嵌入式tomcat。您正在部署到一个单独的tomcat实例中。两者都不一样。@Lucky在启动tomcat之后,我确实看到myapp正在部署,但没有关于/persons/我希望您的组件、配置和服务都在公司的包中。如果没有,请将其放在本包装内。另外,不要使用三个@Configuration
、@EnableAutoConfiguration
和@ComponentScan
注释,而是使用这个@springbootplication
注释。还要将springwebmvc
依赖项添加到您的webapp中。这将应用程序标记为web应用程序,并激活关键行为,如设置DispatcherServlet
(即,类似于添加@EnableWebMvc
)谢谢,现在可以使用:)但是SpringBootServletializer显示为折旧。@Arya您可能正在使用org.springframework.boot.context.web.springbootServletializer
而不是使用org.springframework.boot.web.support.springbootServletializer
。谢谢,现在可以使用:)但是SpringBootServletializer显示为折旧。@Arya您可能正在使用org.springframework.boot.context.web.SpringBootServletInitializer
使用org.springframework.boot.web.support.SpringBootServletInitializer