如何在 Eclipse Tomcat 中运行 Spring Boot 应用程序?

Posted

技术标签:

【中文标题】如何在 Eclipse Tomcat 中运行 Spring Boot 应用程序?【英文标题】:How to run spring boot app in Eclipse tomcat? 【发布时间】:2016-04-27 21:41:51 【问题描述】:

我有一个 Spring Boot 应用程序,并希望在 Eclipse 中将其作为服务器应用程序运行。 因此该应用程序将被识别为 Tomcat Web 应用程序并且可以添加我更新方面:

当我运行网络应用程序时,找不到我的其余服务。 Spring Boot 应用程序包含与 Spring Boot 发布之前的 Spring Apps 不同的文件夹结构。可以从 Eclipse 配置的 tomcat 运行 Spring Boot 应用程序吗?同样在 spring boot 之前,需要指定应用程序的控制器部分。我是否需要使用这些设置更新我的 Spring Boot 应用才能从 Eclipse tomcat 运行?

我不想创建一个war然后将它复制到tomcat的webapps文件夹中。

更新:在 Eclipse Tomcat 容器中运行此应用程序的原因是我有其他非 Spring Boot 应用程序,我的新 Spring Boot 应用程序将依赖这些应用程序。

【问题讨论】:

运行不需要部署的应用即可。 @M.Deinum 请查看更新 你为什么需要将它部署到 tomcat...如果你想部署到 tomcat,你需要一个战争(这在参考指南中有解释)。 @M. Deinum 使其成为战争将无法从 Eclipse Tomcat 运行应用程序。发动战争只会让应用程序从tomcat独立运行 @M.Deinum 感谢您的指导,我不关心打包应用程序,我只关心在同一个 tomcat Eclipse 容器中运行 spring 和 spring boot 应用程序。如果不对其结构进行重大更改,Eclipse tomcat 将无法将 Spring Boot 应用程序识别为 Web 应用程序。 【参考方案1】:

按照这 2 个简单的步骤,一切顺利!

步骤 1. 将 pom.xml 文件中的打包格式更改为 war 而不是 jar。

     **<packaging>war</packaging>**

第 2 步。右键单击您的项目,然后执行 Maven -> 更新项目。

执行此步骤后,当您尝试运行项目时,您会发现“在服务器上运行”选项。

【讨论】:

【参考方案2】:

简答

使用 gradle 插件:eclipse-wtpwarApplication 中扩展SpringBootServletInitializer

解释:

为了在 tomcat 上运行 Spring Boot 应用程序,通常生成的工件必须是 war 应用程序。

为了让它在 Eclipse 内的 tomcat 上运行,您必须使用 WTP-Project(Web 工具平台,又名动态 Web 模块),使用 eclipse-wtp gradle 插件。

SpringBootServletInitializer 必须扩展,以便在启动 Tomcat 时启动 Spring Boot 应用程序上下文。

如何创建测试项目

Spring 提供了Getting Started Tutorial 如何使用 Spring Boot 构建 REST Web 服务。我增强了项目以使用 Tomcat 和 Eclipse:

退房

示例项目:

git clone https://github.com/spring-guides/gs-rest-service.git

导入到eclipse中

complete/ 子文件夹导入为 gradle 项目。

更改build.gradle

删除

apply plugin: 'java'
apply plugin: 'eclipse'

添加

apply plugin: 'war'
apply plugin: 'eclipse-wtp'

更改src/main/java/hello/Application.java

添加SpringBootServletInitializer的扩展名

public class Application extends SpringBootServletInitializer 
    ...

完成后,我可以将示例项目部署到在 eclipse 中配置的 Tomcat 服务器并启动该服务器。网址为:http://localhost:8080/complete/greeting?name=User

查看Complete Sample。

【讨论】:

【参考方案3】:

只要在spring boot的主类中添加这个注解即可。

@SpringBootApplication
@Configuration
@ComponentScan(value="packages name to scan")

pom.xml文件中添加依赖。

【讨论】:

【参考方案4】:

对于那些看不到“部署程序集”选项的人,将以下性质添加到 .project 文件将启用部署程序集选项。

org.eclipse.wst.common.modulecore.ModuleCoreNature

为我的项目定义打包结构后,我可以在 Tomcat 服务器上运行应用程序,而无需手动复制 webapps 目录中的 war 文件。

【讨论】:

【参考方案5】:

检查你的 pom.xml:

    <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>

然后检查您的主应用程序类:

@SpringBootApplication
public class Application extends SpringBootServletInitializer 

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) 
        return application.sources(Application.class);
    

    public static void main(String[] args) 
        SpringApplication.run(Application.class, args);
    

然后配置 Project Facets(就像你已经做过的那样):

动态网页模块 Java javascript

然后检查您的部署程序集:

完成!

【讨论】:

这对我帮助很大。太感谢了。但是css、js等静态资源如何在这种情况下使它们可以访问?? 非常感谢,我继承了项目,因此我什至不知道我必须手动将 Maven 依赖项添加到部署程序集 在“部署程序集”下添加“Maven 依赖项”对我有帮助 - 非常感谢!

以上是关于如何在 Eclipse Tomcat 中运行 Spring Boot 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

从 Eclipse 运行时如何杀死 Tomcat?

Tomcat攻略之如何在Eclipse中运行,编译,debugger-Tomcat源代码

如何在 Eclipse Tomcat 中运行 Spring Boot 应用程序?

eclipse不安装tomcat可以运行jsp文件吗

如何在eclipse helios上运行tomcat 7

如何在eclipse中使用maven停止tomcat 7