我有一个简单的RestController应用程序-
@RestController
public class GreetingController {
private static final Logger logger = LogManager.getLogger(GreetingController.class);
@RequestMapping("/greeting")
public ResponseEntity<GreetingResponse> greeting(@RequestParam(value = "name", defaultValue = "World") String name) throws ServiceException, Exception {
logger.info("Received Request. Name: " + name);
它在SpringBoot(http://localhost:8080/greeting)上运行良好,但是当我创建一个WAR并将其部署到Tomcat(9.0.2)上时,它将抛出404。
应用程序部署良好,我可以在应用程序中访问静态HTML页面,因此上下文路径正确。
我可能会缺少什么?
这是我的毕业任务-
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile('com.jayway.jsonpath:json-path')
compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.10.0'
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.10.0'
}
war {
archiveName = "ROOT.war"
manifest {attributes "Implementation-Version": "${version}"}
}
如果有人好奇,我会压缩整个应用程序here。
答案 0 :(得分:1)
发现了问题。我的应用程序必须扩展SpringBootServletInitializer
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
答案 1 :(得分:0)
您的回答是正确的,我只是想补充一下,如果您有需要为应用程序创建war文件并将其部署在Tomcat或IBM Liberty等外部应用程序服务器上的要求,那就是最好在将其安装在外部App服务器中时禁用内置的tomcat启动器。这可以通过使用POM文件中的个人档案标签并使用排除标签来指定您不需要“ spring-boot-starter-tomcat”来完成。
我们的POM看起来像这样
<groupId>com.anz.tpp</groupId>
<artifactId>example-project</artifactId>
<packaging>war</packaging>
<version>1.0.0-SNAPSHOT</version>
<name>Example Project</name>
<!-- Versions -->
<properties>
<apache.camel.version>X.X.X</apache.camel.version>
<junit.version>X.X</junit.version>
</properties>
<!-- Spring Boot Parent -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.1.RELEASE</version>
<relativePath />
</parent>
<profiles>
<profile>
<id>dev</id>
<properties>
<activatedProperties>dev</activatedProperties>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<skip>true</skip>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>local</id>
<properties>
<activatedProperties>local</activatedProperties>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
.......
</profile>
</profiles>
不确定这是否真的会给您带来麻烦,但是最好在两个配置文件下进行操作,在这些配置文件中,您可以使用一个配置文件通过intelliJ或Eclipse等IDE通过其他方式运行项目,也可以使用dev配置文件通过指定“ mvn clean install -U -P dev”来构建软件包,以将war文件部署在外部应用服务器(例如tomcat或IBM Liberty)中。
如果您已经弄清楚了,我深表歉意,只是这在我的春季启动项目的开始阶段对我有帮助。希望这会有所帮助!