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,只有当我开始使用 maven spring-boot:run 时。删除 provided 按预期启动。 为什么不建议在独立的 tomcat 服务器上运行 Spring Boot 应用?

以上是关于Intellij spring boot 应用程序无法从 tomcat 运行的主要内容,如果未能解决你的问题,请参考以下文章

Intellij spring boot 应用程序无法从 tomcat 运行

从 IntelliJ 社区版启动 Spring Boot 应用程序

Intellij 找不到我的 Spring Boot 应用程序

Intellij:运行配置Spring Boot项目

无法在 IntelliJ Idea 中启动 spring-boot 应用程序

使用 Intellij IDEA 重新加载远程 Spring Boot 应用程序时出现异常