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

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

enter image description here

当我运行Web应用程序时,我的REST服务无法被找到。Spring Boot应用程序包含不同的文件夹结构,与Spring Boot发布之前的Spring应用程序不同。能否从配置了Tomcat的Eclipse中运行Spring Boot应用程序?此外,在Spring Boot之前,需要指定应用程序的控制器部分。我是否需要使用这些设置更新我的Spring Boot应用程序以便从Eclipse tomcat运行?
我不想创建war文件,然后将其复制到Tomcat的webapps文件夹中。
更新:在Eclipse tomcat容器内运行此应用程序的原因是,我有其他非Spring Boot应用程序依赖于我的新Spring Boot应用程序。

1
只需运行应用程序,无需部署。 - M. Deinum
为什么要将它部署到Tomcat上呢?假设您正在使用http通信,这并不重要是不是同一个Tomcat。如果您想要部署到Tomcat,则需要war包(这在参考指南中有解释)。 - M. Deinum
@M.Deinum 在进行 REST 调用时很重要,比如我有两个应用程序。a -> Spring 应用程序。b -> Spring Boot 应用程序。a 正在向 b 发送服务调用。在生产中,a 和 b 需要部署在同一个 Tomcat 容器上。在开发过程中,我需要运行两个 Tomcat 实例,嵌入式的 a 和 Eclipse Tomcat 的 b。这也意味着 a 或 b 将需要在不同的端口上运行,并且从 a 到 b 的 REST 调用将需要更改端口号。 - blue-sky
1
@M. Deinum,将其变成战争不会使应用程序能够从Eclipse Tomcat运行。制作战争只会允许应用程序从Tomcat独立运行。 - blue-sky
1
@M.Deinum 感谢您的指南,我不关心打包应用程序,我只关心在同一个Tomcat Eclipse容器中运行Spring和Spring Boot应用程序。Eclipse Tomcat将无法识别Spring Boot应用程序作为Web应用程序,除非对其结构进行重大更改。 - blue-sky
显示剩余7条评论
5个回答

21

检查你的 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);
    }
}

然后配置项目结构(如您已经完成的那样):

  • 动态 Web 模块
  • Java
  • Javascript

然后检查您的部署汇编: enter image description here

完成!


这真的帮了我很多。非常感谢。 但是,静态资源如css、js等该如何在这种情况下让它们可访问? - madan
1
非常感谢,我继承了这个项目,因此我甚至不知道我必须手动将Maven依赖项添加到部署程序中。 - Gustavo Ulises Arias Méndez
将“Maven Dependencies”添加到“Deployment Assembly”下,这就是解决我的问题的方法 - 非常感谢! - ArturT

2

简短回答

  • 使用gradle插件:eclipse-wtpwar
  • Application中扩展SpringBootServletInitializer

解释:

为了在Tomcat上运行Spring Boot应用程序,通常产生的产物必须是一个war应用程序。

为了使其在Eclipse中的Tomcat上运行,您必须使用一个WTP-Project(Web Tools Platform,又称Dynamic Web Module),并使用eclipse-wtp gradle插件。

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

如何创建测试项目

Spring提供了一个入门教程,介绍如何使用Spring Boot构建REST webservice。我增强了该项目以与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服务器并启动服务器。URL为:http://localhost:8080/complete/greeting?name=User

查看完整示例


0

对于那些无法看到“部署组件”选项的人,将以下属性添加到.project文件中将启用部署组件选项。

org.eclipse.wst.common.modulecore.ModuleCoreNature

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

-1

按照以下两个简单步骤,你就可以开始了!

第一步:在你的pom.xml文件中将打包格式从jar改为war。

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

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

完成这些步骤后,当您尝试运行项目时,您将找到一个名为“在服务器上运行”的选项。


-1

只需在Spring Boot的主类中添加此注释。

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

将依赖项加入到pom.xml文件中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接