Intellij spring boot 应用程序无法从 tomcat 运行
Posted
技术标签:
【中文标题】Intellij spring boot 应用程序无法从 tomcat 运行【英文标题】:Intellij spring boot app does not work from tomcat 【发布时间】:2016-06-20 04:51:05 【问题描述】:这是我的课
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Configuration
@ComponentScan
@EnableAutoConfiguration
@SpringBootApplication
public class TomcatIcınApplication
public static void main(String[] args)
SpringApplication.run(TomcatIcınApplication.class, args);
@RestController
class GreetingController
@RequestMapping("/hello/hi")
String hello( )
return "Hello, xx!";
当我运行应用程序并打开localhost:8080/hello/hi
时,我可以看到输出。但是从Edit Configurations
开始,当我将端口8081
上的tomcat服务器添加为localhost:8081/hello
并这次运行tomcat时,它会调用应用程序并打开页面但它是空的。
为什么我看不到我的输出?
【问题讨论】:
我认为你需要访问这个 url-localhost:8081/ProjectName/hello/hi 其中项目名称是你在 Tomcat 中部署的战争文件名。 【参考方案1】:当您简单地运行应用程序时,Spring Boot 将使用其嵌入式 tomcat 服务器来运行您的应用程序。如果您打算使用另一个独立的 tomcat 服务器来部署您的启动应用程序,我不推荐,首先您应该告诉您的构建工具将您的应用程序打包为 war
而不是 jar
.然后修改您的主启动应用程序入口点以支持它,最后通过使用 Intellij 或手动将您的 war
文件部署到您的 tomcat 服务器。
生成可部署的war 文件的第一步是提供SpringBootServletInitializer
子类并覆盖其configure
方法。在你的情况下:
@SpringBootApplication
public class TomcatIcınApplication extends SpringBootServletInitializer
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
return application.sources(TomcatIcınApplication.class);
public static void main(String[] args)
SpringApplication.run(TomcatIcınApplication.class, args);
然后告诉您的构建工具将您的应用程序打包为war
,而不是jar
。如果您使用的是 maven,只需添加:
<packaging>war</packaging>
最后将spring-boot-starter-tomcat
标记为provided
:
<dependencies>
<!-- ... -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- ... -->
</dependencies>
您阅读了有关 Spring Boot 的更多信息传统部署here。
【讨论】:
我将 jar 更改为 war,并添加了您编写的依赖项,因为我没有这样的 artifactid。在编辑配置中,当我添加 tomcat 服务器时,它说没有工件。我应该创建一个 Web 存档探索文件作为工件吗? 是的,我添加了,我将所有可用元素放在左边,现在当我转到 localhost:8081/hello/hi 时它可以工作。谢谢。 如果我只是在 IntelliJ 中运行应用程序,它不会启动 tomcat,只有当我开始使用 mavenspring-boot:run
时。删除 provided
按预期启动。
为什么不建议在独立的 tomcat 服务器上运行 Spring Boot 应用?以上是关于Intellij spring boot 应用程序无法从 tomcat 运行的主要内容,如果未能解决你的问题,请参考以下文章
Intellij spring boot 应用程序无法从 tomcat 运行
从 IntelliJ 社区版启动 Spring Boot 应用程序
Intellij 找不到我的 Spring Boot 应用程序